Monkey是一個快速檢查記憶體洩露的好工具,可以初步發現較明顯的記憶體洩露問題。
什麼是記憶體洩露?是指不在使用的對象持續占有記憶體,造成記憶體空間的浪費。
檢查記憶體洩露的基本操作步驟:
1.運作Monkey或者固定自動化用例
adb shell monkey -p cn.microinvestment.weitou --pct-touch 100 --ingore-crashes --throttle 1000 -s 100 -v -v 50
2.監控記憶體值,如果出現過大等遞增異常則儲存HPROF檔案
檢視應用記憶體的指令:adb shell dumpsys meminfo(程序名)
以下為一個bat腳本,主要 是記錄第一行的和最後一行總共的記憶體,一直循環查詢:
set process=cn.microinvestment.weitou
@adb sehll dumpsys meminfo %process% | findstr "Pss"
:m
@adb sehll dumpsys meminfo %process% | findstr "TOTAL"
@ping -n 5 127.1>nul
@goto m
運作後,如圖:
如果發現記憶體過大,則儲存HPROF檔案:
adb shell am dumpheap <程序名> <儲存路徑>
3.但是生成的HPROF檔案怎麼檢視呢?我們要用到一個工具MAT來檢視,但是首先還要這個HPROF檔案轉換成MAT可讀的檔案,在Android SDK tool裡面有個hprof-conv指令:
hprof-conv<原HPROF檔案路徑><轉換後的HPROF路徑>
4.用MAT工具打開轉換後的HPROF檔案:
MAT下載下傳:http://www.eclipse.org/mat/
安裝好JDK,配置好環境後打開MAT工具,選擇File-Open File...,,再選擇剛轉換後的檔案。
一般來說會選擇第一個,Leak Suspects Report
會看到report的概覽:
再下面是問題清單:
我們可以通過SQL語句來查詢對象有沒有被釋放掉,如果有多個相同的對象,則會存在記憶體洩露的問題。
在SQL查詢框裡輸入:select * frominstanceof android.app.Activity,然後點選右上角的黑色感歎号按鈕。
如果出現多個相同的對象,則存在記憶體洩露。
技術改變世界!
--狂詩絕劍