我有一个SyncAdapter重载onPerformSync。在这种方法中,我想访问共享首选项来获取和放置设置。据我所知,我需要访问上下文。SyncAdapter onPerformSync有一个绑定参数,也许我可以这样发送上下文。
在类似的问题中,我还有另一个基类(不是服务或活动),我也对使用sharedPreferences感兴趣。为此,我需要将上下文传递给类中的方法,或者使用上下文实例化它,然后将上下文保存为私有成员。
在这两种情况下,我都理解,在与上下文关联的活动或服务的生命周期之外保留和使用上下文可能导致内存泄漏。
在我的例子中,我的应用程序可以从广播接收器或主要活动开始。广播接收器启动一个后台进程,而主活动只启动主活动。无论哪个打开,先注册定期的SyncAdapter更新,然后打开另一个类。因此,如果我要传递调用活动或服务的上下文,如果其中任何一个随后关闭,会发生什么情况?SyncAdapter或基类将使用过时的上下文,and...memory泄漏?或者上下文是否会恢复到仍在运行的内容?
我也看到了这个问题的解决方案:(静态的方式获得‘上下文’在Android上?),但这能解决任何问题吗?然后,我将有一个活动上下文、一个应用程序上下文和一个服务上下文。同样的问题对吧?SyncAdapter可能最终会坚持一个已经关闭的上下文,不是吗?
基于这里的第一个答案(SharedPreferences应用程序上下文与活动上下文),我很想使用上一个链接中列出的应用程序单例,但我想确保。谢谢
发布于 2014-11-20 22:22:54
我认为您要做的是创建一个Service来管理SyncAdapter,就像前面提到的这里一样。这样,当Context运行时,传递给Service的SyncAdapter应该是有效的。
该链接显示您将把Service.getApplicationContext()传递给SyncAdapter构造函数。然后,您可以将该Context存储为SyncAdapter中的字段,并在需要时使用它。只要您需要,Context应该是有效的。
当应用程序和/或SyncAdapter获得GC时,下次您需要它时,他们应该用一个新的Context构建一个新的Context。
https://stackoverflow.com/questions/27050267
复制相似问题