最新版的leackCanary可以帮助我们主动进行初始化,原理是利用Android系统的加载过程
由于Android源码在启动application之前会先去调用ContentProvider的onCreate方法,所以leackCanary就去声明了一个ContentProvider让他去完成初始化的操作,但是这种操作会导致极大消耗性能所以在框架中不推荐使用,leackCanary之所以这么做是因为他的依赖方式为debugImplemetation只在调试中进行依赖所以不会影响正式的打包
leackCanary默认只可以监听Activity和Fragment的内存泄漏,因为他对Activity和Fragment的生命周期设置了回调,然后在回调中维护了一个弱引用队列方式判断内存是否被gc回收(若未能回收则是存在内存泄漏)
原始队列
当Activity通过弱引用进行保存,leackCanary将软引用复制了一份存放在观察队列当中,然后当Activity被gc回收时他的软引用对象会存放在引用队列当中,如果引用队列存在对象则会将观察列表对应的弱引用溢出,如果引用队列当中为空说明存在内存泄漏,则当activity/fragment调用onDestory时等带把观察队列当中的弱引用全部放到怀疑队列当中(存在内存泄漏),怀疑列表当中就是存在内存泄漏的activity/fragment引用