可能大家都用过了,我这里只是做记录一下
首先,引入LeakCanary
在项目build.gradle中加入
dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3'
// Optional, if you use support library fragments:
debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.3'
}
注意,如果项目gradle版本比较低,要把Implementation改成Compile
我这里没有使用最新的V2.0 alpha2版本,主要原因是从2.0版本开始,LeakCanary已经从support迁移到AndroidX了,项目迁移到AndroidX虽然不难,但调整代码还是有点麻烦的,最重要的是当前接触的项目都还没迁移到AndroidX,所以暂时先用着AndroidX前的最后一个版本,如果你想直接使用最新版,可以直接上gitHub上查看引用https://github.com/square/leakcanary的方式,如果你想将项目改为使用AndroidX库,可以看看这篇博文Android:你好,androidX!再见,android.support
扯远了,旧版本(1.6.3)的LeakCanary,还需要配置安装,在自定义的Application里配置
public class MyApplication extends Application {
@Override
public void onCreate(){
super.onCreate();
//your init work
if(LeakCanary.isInAnalyzerProcess(this)){
return;
}
LeakCanary.install(this);
}
}
到这里,LeakCanary就可以简单的使用了
在这里,我们用简单的单例泄漏来测试一下
单例代码如下(存在内存泄漏)
我们都知道,单例context持有会导致内存泄漏,我们用着来试一下LeakCanary是否真的有用
测试过程如下
首先,我们先做一下简单的跳转,从MainActivity跳转到SingleTestActivity,在SingleTestActivity我们使用SingletonTest这个单例类,
然后关闭SingleTestActivity,返回到MainActivity,
看一下这个过程LeakCanary能不能检测到内存泄漏
执行上述流程后
在通知栏会出现泄漏提醒,并且已经开始分析内存泄漏了,第二个提示申请存储权限的,我们同意一下就好了
等待分析结束,结束时截图
点击通知栏的信息,跳转到分析结果
到这里就算结束了,具体这个分析结果不会看的,可以先点开Tap here to learn more.