Android上下文弱参考

Eli*_*zer 7 android android-context android-asynctask android-memory

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

一些"管理器"方法在从a调用之后启动后台任务Activity,所以我将Activity's' 传递context给方法,并保持一个WeakReference到那个(并在其中使用AsyncTask).该引用一直保持,直到下一次的Activity调用转到后台的方法,当WeakReference设置为新Activitycontext.

我的问题是,是否将ApplicationContext必须保持在WeakReference,并在那里与保持任何问题Activitycontext这样呢?

kab*_*uko 10

保持WeakReference活动上下文的原因是,您不会保留对Activity已经或者应该已经销毁的内容的引用.没有这样的问题Application.WeakReference在这种情况下,A 是不必要的.

由于您没有详细说明您正在使用它的内容,因此很难评论您对活动上下文的使用.你交换不同活动的背景听起来有点怀疑.如果你真的需要一个特定活动的上下文,这可能没问题,但是如果你只想要一个有效Context的使用,AsyncTask那么我会考虑重新考虑你的方法.它可能会起作用,但它有点hacky.根据您的需求,还有其他选项可能更合适:IntentService并且Loaders可以考虑选项.


Joe*_*nte 5

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