在不传递上下文的情况下访问类中的sharedpreferences

时间:2014-11-20 21:52:38

标签: java android android-context android-syncadapter

我在PerformSync上有一个SyncAdapter重载。在那种方法中,我想访问共享偏好来获取和设置设置。据我了解,为此我需要访问上下文。 SyncAdapter onPerformSync有一个bundle参数,也许我可以用这种方式发送上下文。

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

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

在我的情况下,我的应用程序可以从广播接收器或主要活动开始。广播接收器启动后台进程,主要活动才启动主要活动。无论哪个打开,首先注册定期SyncAdapter更新并打开另一个类。因此,如果我要传递调用活动或服务的上下文,如果其中任何一个然后关闭会发生什么? SyncAdapter或基类将使用过时的上下文,并...内存泄漏?或者上下文会恢复到剩下的运行状态吗?

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

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

1 个答案:

答案 0 :(得分:1)

我认为您要做的是创建一个Service来管理SyncAdapter提到的here。这样,传递给Context的{​​{1}}在Service正在运行时应该有效。

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

当应用和/或Context获得GC时,他们应该在您下次需要时使用新的SyncAdapter构建新的SyncAdapter