使用LeakCanary分析并解决Android内存泄露

本文介绍了如何使用LeakCanary工具来检测和解决Android应用的内存泄露问题。通过在项目中集成LeakCanary,可以轻松获取内存泄露的详细信息。文章还列举了一些常见的内存泄露场景,如匿名内部类、Runnable、AsyncTask、Handler以及BroadcastReceiver等,并提供了相应的解决方案,强调了正确管理和使用上下文的重要性。

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

使用LeakCanary分析并解决Android内存泄露

LeakCanary是一款内存泄露分析工具,至于什么是内存泄露网上有很多帖子,这里就不废话了,改工具是在app里植入一个新进程的和一个新入口的工具组件,也就是说使用了leakcanary的app安装后会在桌面看到两个app入口,卸载其中一个另外一个也会被卸载,并且两个入口运行在不同的进程。而在leakcanary入口里可以看到主app里内存泄露的所有信息。这里要说一下,当主app发生内存后,需要一段时间才能在leakcanary里看到,而不是马上就有,因为hprof文件的导出和分析需要很长时间,直到在notifycation出现通知才在leakcanary里能看到细节信息,LeakCanary托管在github上:点击进入

这里写图片描述

这里写图片描述

这里写图片描述


Andorid app查找内存泄露的一般步骤

  • 运行app,先用DDMS内存管理点击GC按钮触发GC或者在adb shell下使用dumpsys meminfo 来观察app是否有内存泄露的嫌疑,这里一定要在app上多操作然后不断的观察内存变化的情况,如果是一直增加的话就可以怀疑有内存泄露的情况,有了leakcanary此步骤可以说在某种程度下能忽略
    这里写图片描述

这里写图片描述

  • 在项目里加入leakcanary,如果用的是AndroidStudio的话在gradle里加入如下代码:
dependencies {
    testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
}
  • 然后在自定义application并在manifest里申明:
public class TestMemApplication extends Application {
   

    @Override
    public void onCreate() {
        super.onCreate();
        Logger.addLogAdapter(new AndroidLogAdapter());
        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...
    }
}
  • 不断的在app里操作,如果有内存泄露的地方会有提示,然后查看,Leakcanary集成以后会在你的app进程之外开启一个新进程,也就是说如果你安装了包含leakcanary的app会发现桌面多出了两个图标,其中之一就是leakcanary,另外一个就是你自己的app了,可以通过点击leakcanary的图标进去查看内存泄露的相关信息。

一些常见的Android内存泄露分析和解决方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值