LeakCanary 流程图
LeakCanary 的机制如下:
RefWatcher.watch()
会以监控对象来创建一个KeyedWeakReference
弱引用对象- 在
AndroidWatchExecutor
的后台线程里,来检查弱引用已经被清除了,如果没被清除,则执行一次 GC - 如果弱引用对象仍然没有被清除,说明内存泄漏了,系统就导出 hprof 文件,保存在 app 的文件系统目录下
HeapAnalyzerService
启动一个单独的进程,使用HeapAnalyzer
来分析 hprof 文件。它使用另外一个开源库 HAHA。HeapAnalyzer
通过查找KeyedWeakReference
弱引用对象来查找内在泄漏HeapAnalyzer
计算KeyedWeakReference
所引用对象的最短强引用路径,来分析内存泄漏,并且构建出对象引用链出来。- 内存泄漏信息送回给
DisplayLeakService
,它是运行在 app 进程里的一个服务。然后在设备通知栏显示内存泄漏信息。