如果我正确解释这篇文章,将活动上下文传递AsyncTasks
给潜在的泄漏,因为活动可能在任务仍在运行时被破坏。
AsyncTasks
如果不是内部类并且需要访问资源或更新 UI,您如何处理?
此外,如果您需要引用进度对话框来关闭它们,如何避免泄漏上下文?
如果我正确解释这篇文章,将活动上下文传递AsyncTasks
给潜在的泄漏,因为活动可能在任务仍在运行时被破坏。
AsyncTasks
如果不是内部类并且需要访问资源或更新 UI,您如何处理?
此外,如果您需要引用进度对话框来关闭它们,如何避免泄漏上下文?
如果我正确理解您的问题: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();