本文中得时序图的uml源码和简化图的draw.io的源文件分享在百度云中
可自行下载修改添加
https://pan.baidu.com/s/1G0LHpgabGt4tyapcYggcwA
1. leakcanary使用方法及学习
关于leakcanary的详细分析已经有很多大牛分析过了,主要看了以下几篇,通俗易懂,用来学习很好
https://www.jianshu.com/p/1e7e9b576391
https://www.liaohuqiu.net/cn/posts/leak-canary/
https://blog.csdn.net/cloud_huan/article/details/53081120
2. leakcanary代码流程
下面是自己总结的流程
leakcanary工作详细过程:
leakcanary工作简化流程:
3.总结
LeakCanay的入口是在application的onCreate()方法中声明的,其实用的就是Application的ActivityLifecycleCallbacks回调接口监听所有activity的onDestory()的,在这个方法进行RefWatcher.watch对这个对象进行监控。
具体是这样做的,封装成带key的弱引用对象,然后GC看弱引用对象有没有回收,没有回收的话就怀疑是泄漏了,需要二次确认。然后生成HPROF文件,分析这个快照文件有没有存在带这个key值的泄漏对象,如果没有,那么没有泄漏,否则找出最短路径,打印给我们,我们就能够找到这个泄漏对象了。
重要的是leakcanary开源,可以自行添加扩展自己想要的功能,使检测更加强大。