LeakCanary笔记

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存在 就继续分析 寻找最短路径 进行展示 没有就已经被回收了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容