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


當 Android 應用程序退出時,並不清理其所占用的內存,Linux 內核進程也相應的繼續存在,所謂“退出但不關閉”。從而使得用戶調用程序時能夠在第一時間得到響應。

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

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

IMPORTANCE_FOREGROUND:

IMPORTANCE_VISIBLE:

IMPORTANCE_SERVICE:

IMPORTANCE_BACKGROUND:

IMPORTANCE_EMPTY:

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

 

 

防止內存溢出 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()。



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM