2014-11-20 69 views
1

我有一个SyncAdapter重载onPerformSync。在该方法中,我想访问sharedpreferences来获取和放置设置。据我了解,为此我需要访问一个上下文。 SyncAdapter onPerformSync有一个bundle参数,也许我可以通过这种方式发送上下文。在没有传递上下文的情况下在类中访问sharedpreferences

在一个类似的问题,我有另一个基类(不是服务或活动),我也有兴趣使用sharedPreferences。为此,我需要将上下文传递给类中的方法,或者将其作为私有成员保存的上下文实例化。

在这两种情况下,我都明白,在与上下文关联的活动或服务的生命周期之外保留和使用上下文可能会导致内存泄漏。

就我而言,我的应用程序可以从broadcastreceiver或主要活动开始。广播接收机开始后台进程,主要活动开始主要活动。首先打开的任何一个都会注册周期性SyncAdapter更新并打开其他类。因此,如果我要传递调用活动或服务的上下文,如果其中一个关闭,会发生什么? SyncAdapter或基类将使用过时的上下文,并...内存泄漏?或者上下文会恢复到任何仍在运行的状态?

我也看到了这样的解决方案:(Static way to get 'Context' on Android?),但会解决什么?然后我会有一个活动上下文,一个应用程序上下文和一个服务上下文。同样的问题对吗? SyncAdapter最终可能会保留已关闭的上下文,否?

基于第一个答案在这里(SharedPreferences application context vs activity context)我很想去上一个链接中列出的应用程序单例,但我想确保。谢谢

回答

1

我认为你想要做的是创建一个Service来管理SyncAdapter像提到的here。这样,传送到ServiceContextSyncAdapter运行时应该有效。

该链接显示您可以将Service.getApplicationContext()传递给SyncAdapter构造函数。然后,您可以将Context作为SyncAdapter中的字段存储,并在需要时使用它。只要你需要,Context应该是有效的。

当应用程序和/或SyncAdapter得到GC'd时,他们应该在下次需要时建立一个新的SyncAdapter并带有新的Context

相关问题