Android上下文弱参考

时间:2013-10-23 01:23:47

标签: android-asynctask android-context android android-memory

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

某些“管理员”方法在从Activity调用后启动后台任务,因此我将context的{​​{1}}传递给该方法,并保留{WeakReference 1}}同样(并使用AsyncTask内部)。当ActivityWeakReference设置为新Activity的{​​{1}}时,该引用将保留到context调用后台方法的下一次。

我的问题是,ApplicationContext是否必须保留在WeakReference中,并且保留Activity的{​​{1}}是否有任何问题?< / p>

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:5)

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