LeakCanary内存泄露检测

【前言】

所谓的内存泄露,大多数情况下,都是跟android那些有生命周期的对象有关,比如:

  • 在后退栈backstack中添加了一个Fragment,但是这个Fragment并没有在 Fragment.onDestroyView()方法中清空它的view字段;(见StackOverflow answer
  • 把activity上下文保存为一个对象的字段,以便在因为配置改变(横竖屏切换之类)而发生activity重建时还能获取到这个对象;
  • 在代码中注册了监听listener、广播接收者broadcast receiver或者RxJava订阅,这些都依赖着有生命周期的对象,但是在有生命周期的对象在onDestroy时,却忘记注销之前注册过的那些对象

那么,怎样方便快速地定位找出这些导致内存泄露的代码呢?LeakCanary就是内存泄露检测的神器

【LeakCanary 2.0+使用方法】

截止到发文,目前LeakCanary最新版本是:2.2

1)在项目的build.gradle中添加以下依赖:

dependencies {
  // debugImplementation because LeakCanary should only run in debug builds.
  debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.2'
}

2)然后,编译打包运行,就可以看到成功的日志打印:

D LeakCanary: Installing AppWatcher

3)注意,从2.0+开始,你不需要添加任何代码,即可检测activity与fragment的是否发生内存泄露,假如你需要检测其他对象是否发生内存泄露,在监测对象本该已经销毁的地方(比如:onDestroy)添加下面代码,就可以检测你需要监测的对象是否正常销毁

  AppWatcher.INSTANCE.getObjectWatcher().watch(mPresenter,"观察presebter是否正常销毁");

4)要是运行的apk有内存泄露的话,你会看到弹出一个小鸟的弹窗,等个5秒钟,去桌面打开:

这个icon在安装好你的apk,就会显示在桌面了

5)然后,你就可以看到内存泄露的具体信息:

【备注】

 假如你使用的是2.0之前的旧版本,那么参照这个升级说明文档升级吧~

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值