android 內存管理機制、異常、垃圾回收

當 Android 應用程序退出時,並不清理其所佔用的內存,Linux 內核進程也相應的繼續存在,所謂「退出但不關閉」。從而使得用戶調用程序時可以在第一時間獲得響應。web

當系統內存不足時,系統將激活內存回收過程。爲了避免因內存回收影響用戶體驗(如殺死當前的活動進程),spa

Android 基於進程中運行的組件及其狀態規定了默認的五個回收優先級:orm

IMPORTANCE_FOREGROUND:對象

IMPORTANCE_VISIBLE:生命週期

IMPORTANCE_SERVICE:進程

IMPORTANCE_BACKGROUND:圖片

IMPORTANCE_EMPTY:內存

  這幾種優先級的回收順序是 Empty process、Background process、Service process、Visible process、Foreground process。ci

 

 

防止內存溢出 1.明確調用System.gc();2.圖片處理完成後回收內存。  請在調用BitMap進行圖片處理後進行內存回收。  bitmap.recycle();  這樣會把剛剛用過的圖片佔用的內存釋放。3.圖片處理時指定大小。

1. 在Android平臺上,長期保持一些資源的引用,形成一些內存不能釋放,帶來的內存泄露問題不少。好比:Context(下文中提到的Activity都是Context),在一些你須要保持你的首個類對象狀態,而且把狀態傳入其餘類對象中時,這樣消除掉首個類對象以前,你必須先把接收類對象釋放掉。須要注意一點的是:由於在Java或者Android內存機制中,頂點的結點釋放前必須保證其餘對象沒有調用才能被系統GC回收釋放。

綜上所述,要避免內存泄露,主要要遵循如下幾點:資源

 

  第一:不要爲Context長期保存引用(要引用Context就要使得引用對象和它自己的生命週期保持一致)。

 

  第二:若是要使用到Context,儘可能使用ApplicationContext去代替Context,由於ApplicationContext的生命週期較長,引用狀況下不會形成內存泄露問題

 

  第三:在你不控制對象的生命週期的狀況下避免在你的Activity中使用static變量。儘可能使用WeakReference去代替一個static。

 

  第四:垃圾回收器並不保證能準確回收內存,這樣在使用本身須要的內容時,主要生命週期和及時釋放掉不須要的對象。儘可能在Activity的生命週期結束時,在onDestroy中把咱們作引用的其餘對象作釋放,好比:cursor.close()。

相關文章
相關標籤/搜索