1. 程式人生 > >使用Android Studio檢測記憶體洩露

使用Android Studio檢測記憶體洩露

記憶體洩露,是Android開發者最頭疼的事。可能一處小小的記憶體洩露,都可能是毀千里之堤的蟻穴。 怎麼才能檢測記憶體洩露呢?
AndroidStudio 中Memory控制元件臺(顯示器)提供了一個記憶體監視器。我們可以通過它方便地檢視應用程式的效能和記憶體使用情況,從而也就可以找到需要釋放物件,查詢記憶體洩漏等。

熟悉Memory介面

開啟日誌控制檯,有一個標籤Memory ,我們可以在這個介面分析當前程式使用的記憶體情況。
這裡寫圖片描述
執行要監控的程式(APP)後,開啟Android Monitor控制檯視窗,可以看到Memory控制檯。 點選Memory控制檯上Enable按鈕,Memory控制檯開始顯示正在執行時程式的Memory使用情況。如上圖中顯示:
AndroidStudio Memory的功能:

  • 啟動與關閉Memory監測按鈕
  • 手動觸發GC按鈕
  • dump java heap 按鈕,點選Android Studio就開始幹活了,成功後會自動開啟 hprof檔案。
  • start(stop) allocation tracking按鈕先點選一次,然後會看到Memory
    Recorder開始轉動,然後自己開始在APP上面做相應的操作。在合適的時間再點一次,結束記錄。

如何檢測記憶體洩露

我們點選dump java heap 這個按鈕,APP會Freeze住。大概幾十秒後,
dump成功後會自動開啟 hprof檔案。
這裡寫圖片描述

如果我們想了解記憶體分配更詳細的情況,可以使用Allocation Traker來檢視記憶體到底被什麼佔用了。 點選Starg Allocation Tracking按鈕。開始分配追蹤,過一些時間後,點選Stop Allocation Tracking結束追蹤的位置。停止追蹤後 .alloc檔案會自動開啟。
這裡寫圖片描述


當你想檢視某個方法的原始碼時,右鍵選擇的方法,點選Jump to source就可以了。

使用LeakCanary

LeakCanary是square公司推出的一款簡單粗暴的檢測記憶體洩漏的工具。
LeakCanary會檢測應用的記憶體回收情況,如果發現有垃圾物件沒有被回收,就會去分析當前的記憶體快照,也就是上邊MAT用到的.hprof檔案,找到物件的引用鏈,並顯示在頁面上。這款外掛的好處就是,可以在手機端直接檢視記憶體洩露的地方,可以輔助我們檢測記憶體洩露。
這裡寫圖片描述
使用:
在build.gradle檔案中新增,不同的編譯使用不同的引用:

dependencies { 
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3' }

在應用的Application onCreate方法中新增LeakCanary.install(this),如下:

public class ExampleApplication extends Application {

  @Override public void onCreate() {
    super.onCreate();
    LeakCanary.install(this);
  }
}

應用執行起來後,LeakCanary會自動去分析當前的記憶體狀態,如果檢測到洩漏會發送到通知欄,點選通知欄就可以跳轉到具體的洩漏分析頁面。
關於LeakCanary的更多分析可以檢視這裡