使用匿名類處理程式計時器任務執行緒避免記憶體洩漏
在 android 中,每個開發人員在專案中至少使用一次 Anonymous Class
(Runnable)。任何 Anonymous Class
都有對其父(活動)的引用。如果我們執行長時間執行的任務,則在任務結束之前不會銷燬父活動。
示例使用 handler 和 Anonymous Runnable
類。當我們在 Runnable
完成之前退出活動時,記憶體將會洩漏。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// do abc long 5s or so
}
}, 10000); // run "do abc" after 10s. It same as timer, thread...
我們如何解決?
- 不要用
Anonymous Class
進行任何長時間操作,否則我們需要一個Static class
並將WeakReference
傳遞給它(例如活動,檢視……)。Thread
與Anonymous Class
相同。 - 當活動被破壞時取消
Handler
,Timer
。