Android上下文在AsyncTask中泄漏

如果我正确地解释这篇文章 ,将活动上下文传递给AsyncTasks是一个潜在的泄漏,因为活动可能在任务仍在运行时被破坏。

你如何在AsyncTasks中处理这些不是内部分支,需要访问资源或更新UI?

此外,如果您需要参考进度对话框来解除它们,您如何避免泄漏上下文?

  • Android Holo Light的风格根据所选的上下文而变化
  • 从类中调用getString(R.strings ...)?
  • 在Android中获取应用程序上下文到静态方法的最佳方法
  • 在android中添加上下文菜单图标
  • 重命名内部存储中的文件
  • 启动IntentService的空指针exception
  • 为什么Activity的构造函数中的getApplicationContext()会引发空指针exception?
  • 在非Activity类中获取Context
  • 如果我正确理解你的问题:Java的WeakReference或SoftReference类非常适合这种情况。 它将允许您将上下文传递给AsyncTask,而不会阻止GC在必要时释放上下文。

    收集WeakReferences时,GC比收集SoftReference时更加渴望。

    代替:

     FooTask myFooTask = new FooTask(myContext); 

    你的代码如下所示:

     WeakReference<MyContextClass> myWeakContext = new WeakReference<MyContextClass>(myContext); FooTask myFooTask = new FooTask(myWeakContext); 

    并在AsyncTask而不是:

     myContext.someMethod(); 

    你的代码如下所示:

     myWeakContext.get().someMethod();