Context使用不當造成內存泄露:不要對一個Activity Context保持長生命周期的引用。盡量在一切可以使用應用ApplicationContext代替Context的地方進行替換。
構造Adapter時,沒有使用緩存的 convertView
Bitmap對象不在使用時調用recycle()釋放內存
非靜態(tài)內部類的靜態(tài)實例容易造成內存泄漏:即一個類中如果你不能夠控制它其中內部類的生命周期(譬如Activity中的一些特殊Handler等)靶擦,則 盡量使用靜態(tài)類和弱引用來處理(譬如ViewRoot的實現)框沟。
警惕線程未終止造成的內存泄露六水;譬如在Activity中關聯了一個生命周期超過Activity的Thread,在退出Activity時切記結束線 程凰盔。一個典型的例子就是HandlerThread的run方法是一個死循環(huán)墓卦,它不會自己結束,線程的生命周期超過了 Activity生命周期户敬,我們必須手動在Activity的銷毀方法中中調運 thread.getLooper().quit();才不會泄露落剪。
對象的注冊與反注冊沒有成對出現造成的內存泄露睁本;譬如注冊廣播接收器、注冊觀察者(典型的譬如數據庫的監(jiān)聽)等忠怖。
創(chuàng)建與關閉沒有成對出現造成的泄露呢堰;譬如Cursor資源必須手動關閉,WebView必須手動銷毀凡泣,流等對象必須手動關閉等枉疼。
不要在執(zhí)行頻率很高的方法或者循環(huán)中創(chuàng)建對象(比如onmeasure),可以使用HashTable等創(chuàng)建一組對象容器從容器中取那些對象鞋拟,而不用每次 new與釋放往衷。
避免代碼設計模式的錯誤造成內存泄露;譬如循環(huán)引用严卖,A持有B,B持有C布轿,C持有A哮笆,這樣的設計誰都得不到釋放。