在我的一些应用程序中,我使用一些单例对象作为“管理员”。我在Application.onCreate
中对它们进行实例化,然后将ApplicationContext
传递给WeakReference
,我将其存储在Activity
中。
某些“管理员”方法在从Activity
调用后启动后台任务,因此我将context
的{{1}}传递给该方法,并保留{WeakReference
1}}同样(并使用AsyncTask
内部)。当Activity
将WeakReference
设置为新Activity
的{{1}}时,该引用将保留到context
调用后台方法的下一次。
我的问题是,ApplicationContext
是否必须保留在WeakReference
中,并且保留Activity
的{{1}}是否有任何问题?< / p>
答案 0 :(得分:10)
将WeakReference
保留在活动的上下文中的原因是,您不会保留对已经或应该已经销毁的Activity
的引用。 Application
不存在此类问题。在这种情况下,WeakReference
是不必要的。
很难评论您对活动上下文的使用,因为您还没有详细说明您正在使用它的内容。你交换不同活动的背景听起来有点怀疑。如果你真的需要一个特定活动的上下文,这可能没问题,但是如果你只想让一个有效的Context
与AsyncTask
一起使用,那么我会考虑重新思考你的方法。它可能会起作用,但它有点hacky。根据您的需要,还有其他选项可能更合适:IntentService
和Loaders
是需要考虑的选项。
答案 1 :(得分:5)
通常,您不必将应用程序上下文保留在WeakReference中。但是,您应该在WeakReference中保留其他类型的上下文。