通过三方库LeakCanary查看内存泄漏

可能大家都用过了,我这里只是做记录一下

首先,引入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就可以简单的使用了

在这里,我们用简单的单例泄漏来测试一下
单例代码如下(存在内存泄漏)
通过三方库LeakCanary查看内存泄漏_第1张图片
我们都知道,单例context持有会导致内存泄漏,我们用着来试一下LeakCanary是否真的有用

测试过程如下
首先,我们先做一下简单的跳转,从MainActivity跳转到SingleTestActivity,在SingleTestActivity我们使用SingletonTest这个单例类,
然后关闭SingleTestActivity,返回到MainActivity,
看一下这个过程LeakCanary能不能检测到内存泄漏

执行上述流程后

通过三方库LeakCanary查看内存泄漏_第2张图片

在通知栏会出现泄漏提醒,并且已经开始分析内存泄漏了,第二个提示申请存储权限的,我们同意一下就好了
通过三方库LeakCanary查看内存泄漏_第3张图片

等待分析结束,结束时截图
通过三方库LeakCanary查看内存泄漏_第4张图片
点击通知栏的信息,跳转到分析结果
通过三方库LeakCanary查看内存泄漏_第5张图片

到这里就算结束了,具体这个分析结果不会看的,可以先点开Tap here to learn more.

你可能感兴趣的:(Android)