【问题标题】:Android Context Weak ReferenceAndroid 上下文弱参考
【发布时间】:2013-11-01 02:36:05
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我的印象是您必须在 AsyncTask 中使用 Activitycontext。我弄错了吗?有没有ApplicationContext不能使用的情况?如果没有,我宁愿改用ApplicationContext(这会让我的生活更轻松)。
    • 只是上面的补充,据我所知,在实例化View 时不应使用ApplicationContext。对吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多