在閱讀the example時,我注意到作者在MyActivity
中創建了Runnable task
。如果關閉活動,系統將無法垃圾收集它,因爲可運行包含對MyActivity的隱式引用,對吧?只要可運行的作品可用,活動就會一直存在。匿名runnable阻止Android垃圾收集其定義的活動
如果我錯了,請糾正我。
在閱讀the example時,我注意到作者在MyActivity
中創建了Runnable task
。如果關閉活動,系統將無法垃圾收集它,因爲可運行包含對MyActivity的隱式引用,對吧?只要可運行的作品可用,活動就會一直存在。匿名runnable阻止Android垃圾收集其定義的活動
如果我錯了,請糾正我。
似乎正確。
從你的鏈接(儘管談論的AsyncTask,而不是匿名的Runnable):
,如果它是一個內部類的活動/片段,它擁有的隱式引用到它,這是不好的做法,因爲Activity/Fragment可以在配置更改時被銷燬,但當工作線程處於活動狀態時,它們將保留在內存中; 如果它被宣佈爲獨立或靜態內部類和您使用參考上下文來更新視圖,你應該總是檢查它是否爲空或不是「
順便說一句,感謝您的鏈接。我現在正在閱讀,這是非常好的。 – Fabricio
這樣會讓你的' Runnable'靜態:它不會對你的活動隱含引用 – pskink