LeakCanary使用以及相关信息的保存

本文介绍如何在Android应用中使用LeakCanary进行内存泄漏检测,并自定义上传泄漏信息到本地文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档地址
LeakCanary 中文使用说明 这个是2015年的翻译,版本比较旧,但是大体的东西还是可以用的,建议跟官方文档比较着看,避免出错。
本文主要讲述在项目中用到的自定义Leak的东西。
事情的经过是这样的:为了自测,在平时会跑一下Monkey测试,为了检测内存泄漏,就使用了Leak,但是Monkey有时候会手贱的把Leak信息给删除了,造成通知栏有多条泄漏信息,但是具体内容无法查看,所以这里手动把信息写入本地。
官方给的自定义方案
参考官方方案,这里写一下实现步骤。
注意:调试方法不能用到正式包,因为打包不会通过,主要原因就是你引入的依赖是区分debug和release的。所以不要加入代码版本控制中。
//新建application并继承你自己的application,然后在manifest中修改为这个。

public class DebugExampleApplication extends YourApplication{
    @Override
    protected RefWatcher installLeakCanary() {
        // Build a customized RefWatcher
        RefWatcher refWatcher = LeakCanary.refWatcher(this)
                .listenerServiceClass(LeakUploadService.class)
                .buildAndInstall();
        return refWatcher;
    }
}

//原来的application中,初始化改成如下:

if (LogUtils.DEBUG) {//调试开关
            refWatcher = installLeakCanary();
//            LeakCanary.install(this);
        }
        //添加如下方法:
protected RefWatcher installLeakCanary() {
        return RefWatcher.DISABLED;
    }

//LeakUploadService代码:
别忘了在manifest中注册:

<service android:name="sina.mobile.tianqitong.LeakUploadService" />
public class LeakUploadService extends DisplayLeakService {
    @Override
    protected void afterDefaultHandling(HeapDump heapDump, AnalysisResult result, String leakInfo) {
        if (!result.leakFound || result.excludedLeak) {
            return;
        }
        //写入操作
        String newLeakInfo = leakInfo + "****************";
        String fileName = "/sdcard/leak/leak.txt";
        File file = new File(fileName);
        try {
            if (!file.exists()) {
                file.createNewFile();
                BufferedOutputStream bos = new BufferedOutputStream(
                        new FileOutputStream(file));
                bos.write(newLeakInfo.getBytes());
                bos.close();
            } else {
                FileWriter fw = new FileWriter(fileName, true);
                fw.write(newLeakInfo);
                fw.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值