LeakCanary
2018-09-07 09:34:46 0 举报
Leakcanary流程图
作者其他创作
大纲/内容
最后将结果传递给DisplayLeakService
返回DONE完成
AndroidRefWatcherBuilder
开始调用
heapDumper.dumpHeap()生成并保存生成 dump 文件
会注册Activity生命周期函数,在onActivityDestroyed方法中调用watch方法
DisplayLeakService
判断对象是否被回收
LeakCanary.install(this);
HeapAnalyzerService
调用findLeakTrace找到泄漏的引用链和计算出导致内存无法释放的大小
在ensureGoneAsync方法中,watchExecutor异步调用ensureGone()方法
调用HeapAnalyzerService服务的runAnalysis方法,开启服务用于分析dump
调用findLeakingReference()具体的泄漏对象是哪个
gcTrigger.runGc();手动GC一次
调用 heapdumpListener.analyze方法,创建并传入HeapDump对象用于保存dump文件路径,泄漏对象key值和名称,以及白名单对象
是
调用HprofParser中的parse分析dump文件生成堆快照snapshot
调用deduplicateGcRoots()去除重复的强引用关系
使用LeakCanary
ServiceHeapDumpListener
配置参数,生成RefWatcher,下面是配置参数对应的类:ExcludedRefs excludedRefs :白名单对象,不参与内存泄漏的分析ServiceHeapDumpListener heapDumpListener:启动分析服务,监听结果AndroidWatchExecutor watchExecutor: 在异步线程进行分析,默认延时5秒时间,让系统有时间可以GC。AndroidHeapDumper heapDumper:用于生成并保存生成 dump 文件GcTrigger gcTrigger:手动触发GC最后返回ActivityRefWatcher对象
否
对象有Leak嫌疑
LeakCanary
在onHandleIntent方法中创建HeapAnalyzer对象,并且调用checkForLeak方法,传入堆存储文件和泄漏对象key值,检查分析泄漏结果
在watch中先通过uuid产生key值再弱引用绑定Activity,弱引用绑定对象被回收时,添加到引用队列,从而判断Activity是否被回收,再调用ensureGoneAsync方法
将结果显示在Notification,并保存
RefWatcher
创建出AndroidRefWatcherBuilder
结束
0 条评论
回复 删除
下一页