首頁 > 手機軟體

如何用MAT分析Android程式的記憶體洩露

2019-11-29 12:40:07

Android應用開發過程中,稍一不小心經常會出現記憶體洩露,如何用工具來檢測下我們的應用是否存在記憶體洩露呢?MAT就是一款非常好用的分析應用記憶體使用情況的工具,使用起來也非常簡單,下面小編就來和大家分享下具體的操作步驟。

1

在Eclipse中新建一個Android工程,名字叫做:memoryleak。功能很簡單,只有一個MainActivity和一個ImageUtil。我們在MainActivity中使用ImageUtil來載入圖片。注意我們的ImageUtil是單例類。在建立的時候需要傳入context。




2

應用起來以後,轉屏。轉屏以後,MainActivity會重建,導致ImageUtil重新載入圖片。很不幸的是,因為ImageUtil並沒有重建,還持有之前的Context,也就是之前的那個MainActivity範例。多次轉屏以後,我們在Eclipse的DDMS裡面,匯出記憶體映像檔案。匯出的檔案叫做:com.example.memoryleak.hprof。


3

DDMS匯出的記憶體映像檔案並不能被MAT直接使用。需要轉換一下。在命令列輸入:hprof-conv com.example.memoryleak.hprof memoryleak.hprof。


4

用MAT開啟memoryleak.hprof。


5

點選「Histogram」


6

在Class Name後面的輸入框輸入應用的名字:com.example.memoryleak。


7

可以看到有4個MainActivity範例,如果沒有洩露的情況下只應該有一個範例,說明存在記憶體洩露。在MainActivity上點選右鍵->"Merge Shortest Paths To GC Roots"->"exclude all phantom/weak/soft etc.refrences"。


8

在開啟的頁面中,點選可以看到詳細的參照資訊。


9

上圖中可以看出來是ImageUtil參照了一個MainActivity的範例。這樣就找到了洩露的根源,就可以進行處理了。怎麼樣,是不是很簡單,如果覺得有用,請點選投票,小編會繼續努力謝謝你的支援哦。

IT145.com E-mail:sddin#qq.com