【達內課程】Android中的GC垃圾回收機制與記憶體洩漏
阿新 • • 發佈:2018-11-08
當main()方法執行完,main()方法中的區域性變數都會彈棧,從棧當中銷燬
當左側棧中的e2和e銷燬後,右側中的兩個物件就是垃圾
java底層有一種GC垃圾回收機制,在java程式執行時,GC執行緒會不斷找尋垃圾,是的話會清除掉
當我們點選模擬機的返回鍵時,發生了什麼
當GC想回收Activity時,發現被Adapter引用
當GC想回收Adapter時,發現有一條阻塞的執行緒
當我們點選手機的返回鍵時,Activity並不會被銷燬,當再開啟時,我們觀察執行的執行緒,會增加一條。返回再開啟,又會增加執行緒…
如何檢視工作的執行緒
解決辦法如下:
在NewMusicListFragment中重寫onDestroy()方法
@Override
public void onDestroy() {
//把adapter中的執行緒銷燬
adapter.stopThread();
super.onDestroy();
}
MusicAdapter中增加stopThread()方法
public void stopThread() { //isLoop為false,迴圈停止 isLoop = false; //當我們按返回鍵時,執行緒在wait(),應先喚醒 synchronized (workThread) { workThread.notify(); } }
重複剛才操作,不會新增執行緒