關注並回復「1024」,加入技術交流群,致力於技術開發!
最近有想換工作的同學們,可參考《5月技術崗位內推|RN開發招聘啦》,再往下看,一篇關於性能優化的好文章,很值得去學習。
前言在 Android開發中,性能優化策略十分重要
本文主要講解性能優化中的內存優化,希望你們會喜歡
目錄1. 定義優化處理 應用程式的內存使用、空間佔用
2. 作用避免因不正確使用內存 & 缺乏管理,從而出現 內存洩露(ML)、內存溢出(OOM)、內存空間佔用過大 等問題,最終導致應用程式崩潰(Crash)
3. 儲備知識:Android 內存管理機制3.1 簡介下面,將針對回收 進程、對象 、變量的內存分配 & 回收進行詳細講解
3.2 針對進程的內存策略a. 內存分配策略由 ActivityManagerService 集中管理 所有進程的內存分配
b. 內存回收策略Android將進程分為5個優先等級,具體如下:
ActivityManagerService 對 所有進程進行評分(評分存放在變量adj中)
更新評分到Linux 內核
由Linux 內核完成真正的內存回收
此處僅總結流程,這其中的過程複雜,有興趣的讀者可研究系統源碼ActivityManagerService.java
3.3 針對對象、變量的內存策略下面,將詳細講解內存分配 & 內存釋放策略
a. 內存分配策略註:用1個實例講解 內存分配
public class Sample {
int s1 = 0;
Sample mSample1 = new Sample();
public void method() {
int s2 = 0;
Sample mSample2 = new Sample();
}
}
Sample mSample3 = new Sample();
由於靜態分配不需釋放、棧式分配僅 通過幀棧自動出、入棧,較簡單,故不詳細描述
4. 常見的內存問題 & 優化方案內存洩露
內存抖動
圖片Bitmap相關
代碼質量 & 數量
日常不正確使用
下面,我將詳細分析每項的內存問題 & 給出優化方案
4.1 內存洩露內存溢出 簡介:
集合類
Static關鍵字修飾的成員變量
非靜態內部類 / 匿名類
資源對象使用後未關閉
優化方案
具體請看文章:Android性能優化:手把手帶你全面了解 內存洩露 & 解決方案
關於更加具體的介紹,請看文章:Android性能優化:那些關於Bitmap優化的小事
4.3 內存抖動4.4 代碼質量 & 數量4.5 常見使用註:
還有1個內存優化的終極方案:調大 虛擬機Dalvik的堆內存大小
即 在AndroidManifest.xml的application標籤中增加一個android:largeHeap屬性(值 = true),從而通知虛擬機 應用程式需更大的堆內存
但不建議 & 不鼓勵該做法
4.6 額外小技巧此處,還有一些內存優化的小技巧希望告訴給大家
Android 4.0 後提供的一個API
註:此時釋放所佔用的資源能顯著的提高系統的緩存處理容量
具體操作:實現當前Activity類的onTrimMemory()後,當用戶離開視圖時會得到通知;若得到返回的參數 = TRIM_MEMORY_UI_HIDDEN 即代表視圖變為隱藏狀態,則可釋放視圖所佔用的資源.
5. 輔助內存優化的分析工具MAT(Memory Analysis Tools)
Heap Viewer
Allocation Tracker
Android Studio 的 Memory Monitor
LeakCanary
5.1 MAT(Memory Analysis Tools)通過分析 Java 進程的內存快照 HPROF 分析,快速計算出在內存中對象佔用的大小,查看哪些對象不能被垃圾收集器回收 & 可通過視圖直觀地查看可能造成這種結果的對象
5.2 Heap Viewer定義:一個的 Java Heap 內存分析工具
作用:查看當前內存快照
可查看 分別有哪些類型的數據在堆內存總 & 各種類型數據的佔比情況
5.3 Allocation Tracker5.4 Memory Monitor5.5 LeakCanary至此,關於內存優化的所有知識講解完畢
6. 總結閱讀更多
相信自己,沒有做不到的,只有想不到的在這裡獲得的不僅僅是技術!