Android内存泄露排查方法实践

排查方法1:LeakCanary

第一步添加依赖

app/build.gradle

dependencies{ 

   ....

//意思是debug模式下,才会包含功能代码,release下,只有几个类,里面都是空壳。例如:
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2'

}

第二步初始化

public class MainApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        /**
         *  如果当前进程是用来给LeakCanary进行堆分析的则return,否则会执行LeakCanary的install方法。这样我们就可以
         *
         *  使用LeakCanary了,如果检测到某个Activity有内存泄露,LeakCanary就会给出提示。
         */
        if(LeakCanary.isInAnalyzerProcess(this)){
            return;
        }

        LeakCanary.install(this);
    }
}

排查方法2:Mat(Memory Analysis Tools)

下载地址https://www.cnblogs.com/linghu-java/articles/10565730.html

准备工作:

1.首先把MAT工具下载好,下载地址 https://www.eclipse.org/downloads/download.php?file=/mat/1.9.1/rcp/MemoryAnalyzer-1.9.1.20190826-win32.win32.x86_64.zip

 

2.打开DDMS,因为DMS可以生成内存使用记录文件,但AdroidStudio3.0以后在工具栏到不到DDMS,解决办法:https://blog.csdn.net/aurora__/article/details/82658856

 

步骤一:我们用直接找到安装包里去打开DDMS,进入到目录D:\AndroidSDK\Sdk\tools打开DDMS,双击emulator.exe

步骤二:打开DDMS,找到目标进程,点击Dump hprof file ,生成内存记录文件。

步骤三:进入到目录D:\AndroidSDK\Sdk\platform-tools,将步骤二中生成的com.exmaple.memorydemo.hprof文件拷贝到当前目录

步骤四:使用cmd执行命令: hprof-conv com.example.memorydemo.hprof com.example.memorydemo-conv.hprof (因为MAT识别hprof文件,只能识别hprof-conv文件)

步骤五:解压步骤一中下载的文件,双击elicpsec.exe ,找开应用Elipse Memory Analyzer

步骤六:在overview选项中, 找到Biggest Objects byRetained Size,点击Histogram进入对象列表列表模式。

步骤七:因为列表中对象特别多,成千上万个,所以我们需要写一些条件筛选我们关注的对象。例如示例中我们查询Activity内存泄露,在最上面ClassName <Regex>里写上Activity。

步骤八:在列表中可以看到每个Activity在内存中存在的对象个数。个数比较多的就可能是存在内存泄露

步骤九:右键单击目标对象,选择Merge Shorest Path to GC Roots ->execlude all phantom/weak/soft .etc references

步骤十:一直点击展开引用树,就能发现是谁调用了Activity导致类存泄露。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值