泄漏如果我正確地解釋這個article,傳遞活動上下文AsyncTasks
是一個潛在的泄漏,因爲活動可能,而該任務仍在運行被破壞。的Android上下文的AsyncTask
你怎麼處理這AsyncTasks
不在內部clases,需要對資源的訪問或更新UI?
此外,你怎麼能避免泄漏的情況下,如果你需要引用進度對話框解僱他們?
泄漏如果我正確地解釋這個article,傳遞活動上下文AsyncTasks
是一個潛在的泄漏,因爲活動可能,而該任務仍在運行被破壞。的Android上下文的AsyncTask
你怎麼處理這AsyncTasks
不在內部clases,需要對資源的訪問或更新UI?
此外,你怎麼能避免泄漏的情況下,如果你需要引用進度對話框解僱他們?
如果我理解正確你的問題:Java的的WeakReference或SoftReference的類是一個非常適合這種類型的情況。它將允許您將上下文傳遞給AsyncTask,而不會阻止GC在必要時釋放上下文。
的GC收集在WeakReferences時比它正在收集SoftReferences時更渴望。而不是
:
FooTask myFooTask = new FooTask(myContext);
你的代碼看起來像:
WeakReference<MyContextClass> myWeakContext = new WeakReference<MyContextClass>(myContext);
FooTask myFooTask = new FooTask(myWeakContext);
,並在的AsyncTask代替:
myContext.someMethod();
你的代碼看起來像:
myWeakContext.get().someMethod();
只需確保myWeakContext.get()不返回null,否則您就搞砸了。 – 2013-06-26 18:36:48
如果在任務完成後不嚴格需要執行UI更新,則此功能可用。如果在重新創建活動後需要異步任務的結果,則需要使用其他方法。設置爲保持狀態的無頭碎片可以管理您的任務。 – r1k0 2015-01-19 10:00:22
看[此](http://stackoverflow.com/questions/3821423/background-task-progress-dialog-orientation-change-is-there-any-100-working/3821998#3821998)。這是關於方向的變化,但是這涉及到安全地保持對活動/上下文的引用。 – 2010-11-18 23:29:46