DDMS工具檢測記憶體洩露
DDMS是Android開發包中自帶工具,可以測試app性能,用于發現記憶體問題。
1、環境搭建
準備環境,網上随便都能找到,不再叙述了;
2、工具啟動
虛拟機測試:
確定測試環境中已經配置了Android虛拟機,cmd下輸入如下指令啟動:
a、首先通過android list avd 檢視建好的虛拟裝置;
b、通過指令emulator @{name}啟動虛拟機;
c、虛拟機啟動成功後輸入ddms啟動測試工具;
聯機測試:
如果不使用虛拟機測試的話,可以聯機進行測試,需要下載下傳Android驅動,或者使用豌豆莢也可以,安裝程式也比較友善,連接配接前需要将手機設定成USB調試模式,cmd下可以使用adb shell指令測試連接配接是否成功。

連接配接成功後,輸入ddms可以成功啟動工具。
工具左側會顯示已經運作的程序;如果想檢視某個程序的運作log,可以點選左下角綠色加号Add a new logcat filter,輸入filter name和PID。
如果聯機測試,你可能會發現手機裡已經運作的被測程式,但是DDMS左側的清單中沒有顯示被測程式的程序,那麼别猶豫了,不是工具的問題,也不是手機配置的問題,直接讓開發人員在APK中的AndroidManifest.xml檔案中加上android:debuggable="true">重新打包。
3、測試應用
左側清單選中被測程序,點選左上角Show heap updates,點選VM heap視圖中Cause GC按鈕,手動執行記憶體回收操作,會顯示目前程序的記憶體使用詳細情況。
其中data object是資料對象,data object total size是程序中所有資料對象的記憶體總量,這個值大小決定了是否有記憶體洩露。
在手機上不斷操作被測應用,觀察data object的total size的值,total size通常會穩定在一個範圍,不斷操作應用的過程中,系統會不斷生成資料對象,在不斷GC過程中,這些對象會被回收,total size會回落到某個特定範圍。
如果應用存在記憶體洩露情況,data object的total size在每次GC後的值都會比前一次GC後的值要大,反複測試過程中,total size會成明顯上升的趨勢。由此就可以确定被測應用有記憶體洩露迹象。
4、MAT問題定位
發現記憶體問題之後,需要将heap記憶體資訊導出來進行問題定位;點選DDMS左上角Dump HPROF file,選擇位置儲存;
導出來的檔案需要進行格式轉換才能使用MAT打開進行分析,cmd指令運作:
./hprof-conv a.hprof b.hprof
a.hprof為到出檔案的名成,b.hprof為轉換後的名稱。
使用MAT打開b.hprof進行分析,具體分析方法下篇文章介紹