1.会先创建一个RefWatch对象
1.1会在内部先创建弹框对象 enableDisplayLeakActivity
1.2 会先进行反注册 清理掉以前的回调
1.3在ActivityLifeCycleCallBacks中注册Activity的CallBack
OnActiviytDestory中 开始RefWatch.watch
2.RefWatcher
gcTrigger
Set<String> retainedKeys 持有待检测和已经确定内存泄漏的引用的key的集合
2.1首先生成一个 通过 UUID的方式生成retainedKey 并加入retainedKeys中
2.2 然后根据 referencName queue key 生成当前引用的弱引用
3.ensureGoneAsync() 然后进入 ensureGoneAsync 开启异步线程中对弱引用进行分析
3.1首先记录 watch的时间
3.2调用removeWeaklyReachableReferences(); 删除已经回收的引用
3.3再次调用 gcTigger 进行GC
3.4再次调用 removeWeaklyReachableReferences 进行引用回收
3.5如果当前对象的引用key 依然存在retainedkeys当中 就可以初步确定内存泄漏
3.6获取 Dump信息 去分析
4.HeapAnalyzerService.runAnalysis 中的handler中去执行
4.1先排除系统内存泄漏
4.2在checkForLeak中去进一步分析内存
4.21采用HAHA库静Dump的信息 分析然后返回内存快照 SnapShort
4.2.2去除SnapShort 中重复的信息
4.2.3根据retaindKey去差找SnapShorT中是否有我们需要的对象
4.2.4存在 就继续分析 寻找最短路径 进行展示 没有就已经被回收了