Android內存優化(四)LeakCanary使用詳解
LeakCanary是檢測App內存泄露的工具, 內存泄露是Android開發中常見的問題, 使用程序的穩定性下降.
LeakCanary 的機制如下:
RefWatcher.watch()會以監控對象來創建一個KeyedWeakReference弱引用對象- 在
AndroidWatchExecutor的后臺線程里,來檢查弱引用已經被清除了,如果沒被清除,則執行一次 GC - 如果弱引用對象仍然沒有被清除,說明內存泄漏了,系統就導出 hprof 文件,保存在 app 的文件系統目錄下
HeapAnalyzerService啟動一個單獨的進程,使用HeapAnalyzer來分析 hprof 文件。它使用另外一個開源庫 HAHA。HeapAnalyzer通過查找KeyedWeakReference弱引用對象來查找內在泄漏HeapAnalyzer計算KeyedWeakReference所引用對象的最短強引用路徑,來分析內存泄漏,并且構建出對象引用鏈出來。- 內存泄漏信息送回給
DisplayLeakService,它是運行在 app 進程里的一個服務。然后在設備通知欄顯示內存泄漏信息。
監測機制利用了Java的WeakReference和ReferenceQueue,通過將Activity(對象)包裝到WeakReference中,被WeakReference包裝過的Activity對象如果被回收,該WeakReference引用會被放到ReferenceQueue中,通過監測ReferenceQueue里面的內容,就能檢查到Activity是否能夠被回收。
浙公網安備 33010602011771號