LeakCanary 源码详解(1)

leakcanary-android-sample 使用示例
leakcanary-object-watcher-android 自动注册
leakcanary-object-watcher-android-core 各种Watcher 的实现。

LeakCanary 是怎么完成自动注册的,不需要添加任何初始化注入代码?
是利用android系统的app的启动流程中先启动contentProvider 然后是Application的oncreate方法。所以注册代码在LeakCanary的一个contentProvider中。
在这里插入图片描述插播一个,如果有人遇到无法运行sample模块的,准确说是提示安装成功,但设备上不显示无任何反应,找不到sample app。
在这里插入图片描述我来回切换这个选项再安装就可以了,切换成nothing 然后再切换回来default apk就可以了
在这里插入图片描述
然后我们再提出一个问题,内存泄露是怎么检测到的?这也是LeakCanary的核心原理了。
在AppWatcher的manalinstall方法中 调用了很多Watcher的install方法,我们看其中的一个ActiivityWatcher ,监测Activity,里面的实现很简单,看图例1 在install方法的时候注入lifeCycleCallback回调,这样就能在activity destory的时候回调ActivityLifecyclerCallbacks的onActivityDestoryed方法,这就到图例2中在这个回调方法中ActivityWatcher 做了什么,调用了 reachabilityWatcher.expectWeaklyReachable方法,

在这里插入图片描述

点进去你会发现是个接口方法
在这里插入图片描述它的实现,正是ObjectWatcher.看它是怎么传递进ActivityWatcher的,会在AppWatcher里面给ActivityWatcher传递参数objectWatcher
在这里插入图片描述我们再看一下,这个对象是什么,是ObjectWatcher。
在这里插入图片描述
看一下这个对象是怎么实现的,画的部分应该就是核心代码了,下一篇分析吧
在这里插入图片描述待续。。。

猜你喜欢

转载自blog.csdn.net/u012553125/article/details/125277901