7

在我的一些应用程序中,我使用一些单例对象作为“管理器”。我将它们实例化Application.onCreate并传递给它们ApplicationContext,我将其存储在WeakReference.

一些“经理的”方法在从 an 调用后启动后台任务Activity,因此我将Activity's传递context给该方法,并将 a 保留给该方法WeakReference(并在 an 内部使用它AsyncTask)。该引用将一直保留到下一次 anActivity调用进入后台的方法时,此时将WeakReference设置为 new Activitycontext

我的问题是,是否ApplicationContext必须保留在 a中,保留's这样WeakReference有什么问题吗?Activitycontext

4

2 回答 2

11

将 a 保留WeakReference到活动上下文的原因是,您不会保留对Activity已经或应该已经销毁的 a 的引用。不存在这样的问题Application。在这种情况下, AWeakReference是不必要的。

很难评论您对活动上下文的使用,因为您没有详细说明您使用它的确切用途。您正在为不同的活动交换上下文,这听起来有点可疑。如果您确实需要特定活动的上下文,这可能没问题,但如果您只是想要一个有效Context的与 an 一起使用,AsyncTask那么我会考虑重新考虑您的方法。它可能会工作,但它有点hacky。根据您的需要,还有其他可能更合适的选项:IntentService并且Loaders是需要考虑的选项。

于 2013-10-23T01:49:17.430 回答
5

通常,您不必将应用程序上下文保存在 WeakReference 中。不过,您应该将其他类型的上下文保留在 WeakReference 中。

于 2014-09-30T22:36:53.373 回答