Android使用MAT查找内存泄漏

什么是MAT

全名是 Memory Analyzer是一个快速且功能丰富的Java堆分析器,可帮助您查找内存泄漏并减少内存消耗。官网地址

下载地址

MemoryAnalyzer-1.9.0.20190605-win32.win32.x86_64密码:scih
MemoryAnalyzer-1.9.0.20190605-win32.win32.x86密码:d7u9
MemoryAnalyzer-1.9.0.20190605-macosx.cocoa.x86_64密码:rhk9

安装

mac环境上安装如果报错提示 在/.eclipse/1528649425_macosx_cocoa_x86_64/configuration/1539332382530.log路径下查看错误日志 参考Mac安装MAT报错解决方法

Android studio导出hprof

这里以Android Studio 3.2说明,运行程序之后会出现下面的profiler 按钮
在这里插入图片描述
点击profiler 按钮会出现以下页面,我们只需要关注 MEMORY
在这里插入图片描述
然后点击红色区域的 MEMORY ,进入详情页面
在这里插入图片描述
运行项目之后在可能出现泄漏的页面在手机上来回进入退出几次在这里插入图片描述
然后点击上图中红色区域的按钮,左侧就会出现 Heap Dump

在这里插入图片描述
再点击箭头指向的按钮,就可以生成一个hprof的本地文件了。但是此时直接导入MAT工具会报错,所以需要用到Android sdk下platform-tools目录中的hprof-conv工具转化。
格式:hprof-conv 源文件 目标文件
hprof-conv /Users/xxx/a.hprof /Users/xxx/b.hprof

MAT使用

工具栏中选择“File”->“Open Heap Dump”,选择b.hprof
在这里插入图片描述
点击 ActiconsHistogram
在这里插入图片描述
可以搜索项目中的类名,支持模糊搜索。输入 Activity 后,匹配出了以下的内容
在这里插入图片描述
找到自己项目中的 Activity ,就是就是上图中的 FirstActivity,然后右键,选择 “Merge Shortest Paths to GC Roots” -> "exclude all phantom/weak/soft etc. references"
在这里插入图片描述
在这里插入图片描述
上图中的结果就是一个 Handle 延迟导致的泄漏分析结果
在这里插入图片描述
上图就是一个 Handler 泄漏的写法,常用的解决方案有以下:
1、使用静态内部Handler/Runnable + 弱引用
2、在onDestory的时候,手动清除Message

github地址

MAT工具详细介绍

MAT功能介绍
MAT使用入门

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值