Android上下文在AsyncTask中泄漏

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

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

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

Solutions Collecting From Web of "Android上下文在AsyncTask中泄漏"

如果我正确理解你的问题: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();