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

Java 在不传递上下文的情况下访问类中的SharedReference,java,android,android-context,android-syncadapter,Java,Android,Android Context,Android Syncadapter,我有一个SyncAdapter重载onPerformSync。在该方法中,我希望访问SharedReferences以获取和放置设置。据我所知,为此我需要访问上下文。SyncAdapter onPerformSync有一个bundle参数,也许我可以这样发送上下文 在类似的问题中,我还有另一个基类(不是服务或活动),我也对使用SharedReference感兴趣。为此,我需要将上下文传递给类中的方法,或者使用上下文实例化它,然后将其保存为私有成员 在这两种情况下,我理解在与上下文相关的活动或服务

我有一个SyncAdapter重载onPerformSync。在该方法中,我希望访问SharedReferences以获取和放置设置。据我所知,为此我需要访问上下文。SyncAdapter onPerformSync有一个bundle参数,也许我可以这样发送上下文

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

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

在我的例子中,我的应用程序可以从broadcastreceiver或main活动开始。广播接收器启动一个后台进程,主活动只启动主活动。无论哪个先打开,都会定期注册SyncAdapter更新并打开另一个类。因此,如果我要传递调用活动或服务的上下文,那么如果其中一个关闭会发生什么?SyncAdapter或基类将使用过时的上下文,并且…内存泄漏?或者,上下文是否会恢复到仍在运行的内容

我也看到了这个问题的解决方案:(),但这能解决什么问题吗?然后我会有一个活动上下文、一个应用程序上下文和一个服务上下文。同样的问题,对吗?SyncAdapter可能会保留已关闭的上下文,不是吗


根据这里的第一个答案()我很想使用上一个链接中列出的应用程序singleton,但我想确定一下。谢谢

我想你要做的是创建一个
服务
来管理前面提到的
同步适配器
。这样,在运行
SyncAdapter
时,传递给
服务的
上下文应该是有效的

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

当应用程序和/或
SyncAdapter
获得GC'd时,他们应该在下次需要时使用新的
上下文构建一个新的
SyncAdapter