Android內存優(yōu)化方向

  1. 避免內存泄露

    內存泄露是造成OOM的最主要原因
    常見的內存泄露:
     1. 單例  因為單例是全生命周期的,如果引用了非全生命周期變量,就會導致內存泄露
    
     2. 靜態(tài)變量  同樣也是生命周期長
    
     3. Handler  因為非靜態(tài)內部類會持有外部類的引用,Activity destroy之后由于消息隊列還存在消息,handle對象無法被回收,就造成activity也無法銷毀;解決方案是使用靜態(tài)內部類創(chuàng)建handle,并在頁面退出的時候清空消息隊里
    
     4. 資源使用完未關閉 比如BraodcastReceiver,ContentObserver  io流 bitmap等等;解決方案就是及時關閉釋放
    
    開發(fā)階段可以使用工具來實時監(jiān)測我們的程序是否有內存泄露:LwakCanary
    
  2. 優(yōu)化圖片的內存占用

    除了內存泄露,引發(fā)oom的第二大問題就是圖片的內存占用
     1. bitmap   有時候我們需要直接對bitmap進行操作,可以基于軟引用自己實現(xiàn)一個bitmap緩存池,這樣對于同一個圖片,bitmap對象會重復使用(例如默認圖);這也是glide內部的做法;我們在使用context.getResources().getDrawable獲取圖片時,系統(tǒng)內部也維持了一個bitmap緩存池(由算法處理,一般是lru算法)
     
     2. 圖片壓縮     在使用BitmapFactory解碼時,我們可以通過配置參數(shù)對待加載的圖片進行調整,一般有降低分辨率、改變加載模式(ARGB_8888==>RGB565)等
     
     3. 在低級設備上加載更小的圖片,比如使用純色背景,使用更低分辨率的圖片
    
  3. 避免內存抖動

    內存在頻繁的分配和回收時會造成gc頻繁工作,會導致卡頓,嚴重時會引發(fā)OOM
    
    例如在循環(huán)中頻繁拼接String對象,會造成內存抖動;解決方案是采用StringBuffer和StringBuilder
    
  4. 其它優(yōu)化

    除了以上幾個比較大的情況會引發(fā)內存問題外,還有一些其它細節(jié)也會引發(fā)內存問題,需要有針對性的優(yōu)化
    
    1. 數(shù)據(jù)結構優(yōu)化    在Android中使用SparseArrayMap和ArrayMap替代HashMAp
    
    2. 避免使用枚舉
    
    3. 列表復用(listview和recycleview)
    
    4. 減少是視圖的層級
     1. 使用constraintlayout替代線性布局和相對布局
     2. 使用viewstub標簽延遲初始化視圖
     
    5. 將一些復雜計算及占用內存的操作放到native層處理,比如音視頻解碼
    

工具

  1. LeakCanary監(jiān)測內存泄露
  2. MAT分析內存占用
  3. Android監(jiān)測內存實時情況,監(jiān)測內存抖動
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • HereAndroid的內存優(yōu)化是性能優(yōu)化中很重要的一部分,而避免OOM又是內存優(yōu)化中比較核心的一點。這是一篇關于...
    HarryXR閱讀 3,927評論 1 24
  • 本文轉載來源 http://www.csdn.net/article/2015-09-18/2825737/1 (...
    yoosir閱讀 1,220評論 0 5
  • Android內存優(yōu)化是性能優(yōu)化很重要的一部分,而如何避免OOM又是內存優(yōu)化的核心。 Android內存管理機制 ...
    lwwlsky閱讀 20,115評論 4 46
  • 如何避免OOM 一、減小對象的內存占用 1、使用更加輕量的數(shù)據(jù)結構 例如,我們可以考慮使用ArrayMap/Spa...
    呂侯爺閱讀 778評論 0 5
  • 車水馬龍,川流不息,偌大的城市,孤獨的內心,只填滿眼前的工作,卻早已忘記了生活本來的滋味。 這樣的夜晚,一個又一個...
    兮兮碼字的地方閱讀 238評論 0 3

友情鏈接更多精彩內容