Android重新学习笔记和心得(二):LeakCanary学习

最近新学一个东西,叫LeakCanary,是square公司的产品,square公司出了很多的开源工具,比如:RxJava,Bufferknife等。

总结一下LeakCanary主要是检测应用有没有内存泄漏,然后使用MAT工具转换,并且把泄露的地方指示出来。

源码的下载地址: git clone git@github.com:square/leakcanary.git

下载之后,导入工程,选在leakcanary-sample安装即可。(注意默认的例子中,

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() //
        .detectAll() //
        .penaltyLog() //
        .penaltyDialog() //   这里原来写的是penaltyDeath,改为penaltyDialog;否则会直接挂掉
        .build());)

如果是想在自己的项目中导入:

dependencies {
  debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.1'
  releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1'
  // Optional, if you use support library fragments:
  debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.1'
}

然后一般在application的onCreate中添加

public class ExampleApplication extends Application {

  @Override public void onCreate() {
    super.onCreate();
    if (LeakCanary.isInAnalyzerProcess(this)) {
      // This process is dedicated to LeakCanary for heap analysis.
      // You should not init your app in this process.
      return;
    }
    LeakCanary.install(this);
    // Normal app init code...
  }
}

默认安装后,需要到应用管理中把所有的权限都打开,有存储权限、通知弹出的权限,还要允许通知的弹出,默认都是关闭的。

最后说一下,该检测工具的原理,有点儿类似获取ReferenceQueue,这个是java的一个特殊的类,回收时会把所有的将要回收的内容放入该queue中,可以从queue中打印出当前正在回收的对象。所以该检测工具可能可以通过检测该变量,查看是否有没有回收的内容,有的话就默认生成hprof文件,然后使用mat工具转化,并将获取出来得内容展示出来。

以上主要参考自:

https://www.jianshu.com/p/73260a46291c   ReferenceQueue的使用

https://blog.csdn.net/sinat_20059415/article/details/79392633 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值