android 記憶體管理以及優化 粗略方案
Android的記憶體管理方式
1.android系統記憶體分配和回收方式
一個app通常就是一個程序對應一個虛擬機器
通過adb shell 檢視應用的記憶體分配情況
①通過ps來檢視系統內的程序
②通過 dumpsys meminfo 包名 檢視對應的應用的記憶體分配情況
GC只在heap剩餘空間不夠的時候才觸發垃圾回收,GC觸發的時候,所有的執行緒都是會被暫停
2.app記憶體限制機制
每一個app分配的最大記憶體限制,隨著不同的裝置而不同
吃記憶體大戶:圖片
為什麼要限制:為了平衡所有的app能夠正常執行
3.切換應用時後臺
App切換的時候的LRU Cache
onTrimMemory()回撥方法
4.監控記憶體的幾種方法
AS程式碼
Float totalMemory = Runtime.getRuntime().totalMemory()
AS工具 Tools ->Android -> Android device monitor
需要注意的是data object 和 class object的資料
APP記憶體優化方法
1.資料結構優化
頻繁字串拼接用StringBuilder 效能相差不止一點
Arraymap,SparseArray替換HashMap
記憶體抖動(影響流暢性)
再小的Class耗費0.5KB
HashMap一個entry需要額外佔用32B
2.物件複用
複用系統自帶的資源
ListView/GridView的ConvertView複用
避免在onDraw方法裡面執行物件的建立
3.避免記憶體洩漏
由於程式碼瑕疵,導致這塊記憶體
記憶體洩漏會導致剩餘可用的Heap越來越少,GC越來越頻繁,影響流暢性
尤其Activity洩漏
用Application Context而不是Activity Context
4.OOM問題優化
OOM的必然性和可解決性
OOM的絕大部分發生在圖片
強引用和軟引用的意義
5.優化OOM的方法
注意臨時Bitmap物件的及時回收
避免Bitmap的浪費
Try Catch某些大記憶體分配的操作
載入bitmap:縮放比例,解碼格式,區域性載入