1、爲什麼需要對內存泄露進行檢測
如果出現了過多的內存泄露那就會出現crash,影響用戶的體驗。
2、LeakCanary的優點
- 針對Android Activity組件完全自動化的內存泄漏檢查。
- 可定製一些行爲(dump文件和leaktrace對象的數量、自定義例外、分析結果的自定義處理等)。
- 集成到自己工程並使用的成本很低。
- 友好的界面展示和通知。
3、LeakCanary的原理
- RefWatcher.watch() 創建一個 KeyedWeakReference 到要被監控的對象。
- 然後在後臺線程檢查引用是否被清除,如果沒有,調用GC。
- 如果引用還是未被清除,把 heap 內存 dump 到 APP 對應的文件系統中的一個 .hprof 文件中。
- 在另外一個進程中的 HeapAnalyzerService 有一個 HeapAnalyzer 使用HAHA 解析這個文件。
- 得益於唯一的 reference key, HeapAnalyzer 找到 KeyedWeakReference,定位內存泄漏。
- HeapAnalyzer 計算 到 GC roots 的最短強引用路徑,並確定是否是泄漏。如果是的話,建立導致泄漏的引用鏈。
- 引用鏈傳遞到 APP 進程中的 DisplayLeakService, 並以通知的形式展示出來。