android複習路之內存泄漏篇

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銷燬的時候進行註銷,否則會造成內存泄漏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章