android內存泄漏總結:
1.集合框架
集合框架中只添加元素而沒有刪除機制,會一直使用內存,如果框架類是全局的只會使集合所用的內存一直增加。
使用集合類一定要記得有相應的刪除機制。
2.單例造成泄漏
由於單例的靜態型會使其生命週期和app 的一樣,如果不恰當的使用會造成內存泄漏。對於activity的引用可以考慮使用弱引用或者是軟引用。
3.匿名內部類/非靜態內部類
如果在匿名內部類中使用了靜態的實例,則該實例的生命週期和app的生命週期是一樣的,該實例又會持有activity的引用,導致activity的內存無法正常的回收。如果匿名內部類被異步線程所持有就要小心線程和activity的生命週期不一樣,就造成了activity的泄漏。
4.handler內存泄漏
我們爲了避免產生ANR會使用handler如果handler中的任務沒有完成則handler對象和message會被message queue所持有。而且handler的生命週期和activity生命週期不一致所以很容易造成無法正常釋放。避免handler內存泄漏將handler聲明爲靜態的,然後通過軟引用的方式引入activity。
5.儘量避免使用static成員變量
static成員變量的生命週期和app的生命週期是一樣的。如果app是常駐會一直佔用內存。
6.資源未關閉造成的內存泄漏
對於使用量broadcastreceiver contentobsever file 遊標cursor,stream,bitmap,應該在activity銷燬的時候進行註銷,否則會造成內存泄漏。