leakCanary源码全方位解析

20 篇文章 0 订阅
18 篇文章 0 订阅

最新版的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引用

存在内存泄漏的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值