1. 程式人生 > >android 記憶體管理以及優化 粗略方案

android 記憶體管理以及優化 粗略方案

Android的記憶體管理方式

1.android系統記憶體分配和回收方式

一個app通常就是一個程序對應一個虛擬機器

通過adb shell 檢視應用的記憶體分配情況

①通過ps來檢視系統內的程序

②通過 dumpsys meminfo 包名  檢視對應的應用的記憶體分配情況

 

GC只在heap剩餘空間不夠的時候才觸發垃圾回收,GC觸發的時候,所有的執行緒都是會被暫停

2.app記憶體限制機制

每一個app分配的最大記憶體限制,隨著不同的裝置而不同

吃記憶體大戶:圖片

為什麼要限制:為了平衡所有的app能夠正常執行

3.切換應用時後臺

app清理機制

App切換的時候的LRU Cache

onTrimMemory()回撥方法

4.監控記憶體的幾種方法

AS程式碼

Float totalMemory = Runtime.getRuntime().totalMemory()

 

AS工具  Tools ->Android -> Android device monitor

 

需要注意的是data object class object的資料

 

APP記憶體優化方法

1.資料結構優化
頻繁字串拼接用StringBuilder  效能相差不止一點

....StringBuilder的拼接碾壓String的拼接

Arraymap,SparseArray替換HashMap

 

記憶體抖動(影響流暢性)

 

再小的Class耗費0.5KB

 

HashMap一個entry需要額外佔用32B

 

 

 

2.物件複用

複用系統自帶的資源

 

ListView/GridViewConvertView複用

 

避免在onDraw方法裡面執行物件的建立

3.避免記憶體洩漏

由於程式碼瑕疵,導致這塊記憶體

,雖然是停止不用了,但依然被其他東西引用著,使得GC沒法對它進行回收

記憶體洩漏會導致剩餘可用的Heap越來越少,GC越來越頻繁,影響流暢性

 

尤其Activity洩漏

 

Application Context而不是Activity Context

4.OOM問題優化

OOM的必然性和可解決性

 

OOM的絕大部分發生在圖片

 

強引用和軟引用的意義

 

5.優化OOM的方法

注意臨時Bitmap物件的及時回收

避免Bitmap的浪費

Try Catch某些大記憶體分配的操作

載入bitmap:縮放比例,解碼格式,區域性載入