天天看點

專項:Android記憶體洩露實踐分析

影響

  • 導緻OOM
  • 糟糕的使用者體驗
  • 雞肋的App存活率

成效

  • 記憶體洩露是一個持續的過程,随着版本的疊代,效果越明顯
  • 由于某些原因無法改善的洩露(如架構限制),則盡量降低洩露的記憶體大小
  • 記憶體洩露實施後的版本,一定要驗證,不必馬上推行到正式版,可作為beta版持續觀察是否影響/引發其他功能/問題

記憶體洩露實施後,項目的收獲:

  • OOM減少30%以上
  • 平均使用記憶體從80M穩定到40M左右
  • 使用者體驗上升,流暢度提升
  • 存活率上升,推送到達率提升

類型

  • IO
    • FileStream
    • Cursor
  • Bitmap
  • Context
    • 單例
    • Callback
  • Service
    • BraodcastReceiver
    • ContentObserver
  • Handler
  • Thread

技巧

  • 慎用Context
    • Context概念
    • 四大元件Context和Application的context使用參見下表
專項:Android記憶體洩露實踐分析

  • 善用Reference
    • Java引用介紹
    • Java四種引用由高到低依次為:強引用  >  軟引用  >  弱引用  >  虛引用
    • 表格說明
    類型 垃圾回收時間 生存時間
    強引用 永遠不會 JVM停止運作時終止
    軟引用 記憶體不足時 記憶體不足時終止
    弱引用 垃圾回收時 垃圾回收時終止
    虛引用 垃圾回收時 垃圾回收時終止
  • 複用ConvertView
    • 複用詳解
  • 對象釋放
    • 遵循誰建立誰釋放的原則
    • 示例:顯示調用clear清單、對象賦空值

轉自:https://testerhome.com/topics/5822