在一個activity里創建了一個handler用來接收網路回呼訊息,在這個activity里創建了一個Thead來異步網路。 當在等待網路回傳的時候finish了activity,也已經觸發了這個activity的onDestory。但是handler還是能把Message傳遞到activity里,看成員變數 感覺并沒有真正被銷毀
但是adb shell dumpsys activity看已經沒有這個acitivity了
網上有人說是因為 activity使用匿名內部類導致handler類物件持有activity參考導致記憶體溢位,activity沒有被回收
但是我去掉了這個handler和網路Thread 在管理類里weakref一個這個activity觀察還是沒有被銷毀
uj5u.com熱心網友回復:
要看你具體實作了,估計是泄漏了,activity沒有釋放,執行緒沒有停止uj5u.com熱心網友回復:
你在handler做了耗時操作,會引起記憶體泄漏。你用WeakReference也不會馬上回收的,要等到下一個gc掃描到這個參考才會回收。uj5u.com熱心網友回復:
在 onDestory 中 mHandler.removeCallbacksAndMessages(null); 吧uj5u.com熱心網友回復:
你必須保證執行緒銷毀了,handler進行remove 又或者執行緒使用while回圈中的判斷條件設定為falseuj5u.com熱心網友回復:
mHandler.removeCallbacksAndMessages(null); 這句話必須呼叫,否則記憶體泄漏uj5u.com熱心網友回復:
onDestroy里邊要確定執行緒和handler已經銷毀轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/22150.html
標籤:Android
