11

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

AsyncTasks如果不是内部类并且需要访问资源或更新 UI,您如何处理?

此外,如果您需要引用进度对话框来关闭它们,如何避免泄漏上下文?

4

1 回答 1

13

如果我正确理解您的问题:Java 的 WeakReference 或 SoftReference 类非常适合这种情况。它将允许您将上下文传递给 AsyncTask,而不会阻止 GC 在必要时释放上下文。

GC 在收集 WeakReference 时比在收集 SoftReference 时更急切。

代替:

FooTask myFooTask = new FooTask(myContext);

您的代码如下所示:

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

并在 AsyncTask 而不是:

myContext.someMethod();

您的代码如下所示:

myWeakContext.get().someMethod();
于 2010-11-18T23:30:54.837 回答