如果我正确地解释这个
article,将活动上下文传递给AsyncTasks是一个潜在的泄漏,因为活动可能在任务仍在运行时被销毁.
在AsyncTasks中如何处理这些不是内在的内容,需要访问资源或更新UI?
另外,如果您需要引用进度对话框来关闭它们,那么如何避免上下文泄漏?
解决方法
如果我正确地理解你的问题:Java的WeakReference或SoftReference类很适合这种情况.它将允许您将上下文传递到AsyncTask,而不必在必要时避免GC释放上下文.
收集WeakReferences时,GC比在收集SoftReferences时更加渴望.
代替:
FooTask myFooTask = new FooTask(myContext);
你的代码看起来像:
WeakReference<MyContextClass> myWeakContext = new WeakReference<MyContextClass>(myContext); FooTask myFooTask = new FooTask(myWeakContext);
在AsyncTask中,而不是:
myContext.someMethod();
你的代码看起来像:
myWeakContext.get().someMethod();