LeakCanary使用

一·概述

首先说一下内存泄露有什么影响:
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

二.使用

下面看看如何使用leakcanary

首先在gradle文件中引入相关库

 releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2'

然后在全局Application中进行配置

public class MyApplication extends Application {

    private RefWatcher mRefWatcher;
    @Override
    public void onCreate() {
        super.onCreate();
        mRefWatcher = LeakCanary.install(this);
    }
    public static RefWatcher getRefWatcher(Context context){
        MyApplication mApp = (MyApplication) context.getApplicationContext();
        return mApp.mRefWatcher;
    }
}

使用RefWatcher观察Fragment的内存泄露

public abstract class BaseFragment extends Fragment {

  @Override public void onDestroy() {
    super.onDestroy();
    RefWatcher refWatcher = ExampleApplication.getRefWatcher(getActivity());
    refWatcher.watch(this);
  }
}

上传至服务器

public class LeakUploadService extends DisplayLeakService{
    @Override
    protected void afterDefaultHandling(HeapDump heapDump, AnalysisResult result, String leakInfo) {
        super.afterDefaultHandling(heapDump, result, leakInfo);
        if(!result.leakFound||result.excludedLeak){
            return;
        }
        //然后上传我们的文件
        UploadUtil.uploadFile(heapDump.heapDumpFile,"服务器地址");
    }
}

在正式发布的应用中使RefWatcher失效

mRefWatcher = RefWatcher.DISABLED;

三.实例

下面我们用leakcanary来检测一下内存泄漏,看看到底行不行
代码如下

public class MainActivity extends AppCompatActivity {
    private TextView textViewShowMessage;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void click(View view){
        Toast.makeText(this, "启动", Toast.LENGTH_SHORT).show();
        new Thread(){
            @Override
            public void run() {
                super.run();
                SystemClock.sleep(10000);
            }
        }.start();
    }
}

当我们让线程运行起来以后,然后旋转屏幕,很明显上面的代码会产生内存泄露,因为Activity虽然销毁了,但是Thread类持有外部类的引用,产生了内存泄漏。

这时候通知栏会出现一个提示,
这里写图片描述

我们点开通知

这里写图片描述

可以看到泄露信息。这就是leakcanary的使用,总结一下,功能强大,使用简单

最后给出Demo下载地址
Leakcanary使用Demo

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
LeakCanary是一个用于检测Android应用程序内存泄漏的开源库。它可以帮助开发者在开发和测试过程中快速发现和解决内存泄漏问题。 要使用LeakCanary,您需要在您的Android项目中添加以下依赖项(在您的build.gradle文件的dependencies部分): ``` debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.x.x' releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:2.x.x' ``` 接下来,在您的Application类中初始化LeakCanary: ```java public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); if (LeakCanary.isInAnalyzerProcess(this)) { // 这个进程是用于LeakCanary分析的,不执行LeakCanary的初始化操作 return; } LeakCanary.install(this); } } ``` LeakCanary会自动检测您的应用程序中的内存泄漏,并在检测到泄漏时提供详细的报告。当您运行应用程序时,如果发现内存泄漏,LeakCanary会在通知栏中显示一个通知,并在您的应用程序退出时显示一个通知。 通过分析LeakCanary提供的报告,您可以确定内存泄漏的原因,并采取相应的措施来解决问题,例如释放对象引用、取消注册监听器等。 请注意,LeakCanary仅在调试构建中生效,不会影响发布版本的性能。因此,在发布应用程序之前,请确保将LeakCanary从releaseImplementation更改为leakcanary-android-no-op。 希望这个简单的介绍对您有帮助!如果您有任何其他问题,请随时提问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值