adb查找内存泄露

在网上看到大部分都是集成LeakCanary来查找内存泄露,这种方式有代码的入侵性,个人不太喜欢。
所以今天跟大家分享一下我经常使用的方式来查找内存泄露

正文开始

1.打开app跑monkey -v 后面都数据随便自己设定,数值越大,跑的时间越久
adb shell monkey -p 包名 -v 100000
2.当monkey结束后,点返回键一直退回到app主页面
//可以等待几秒钟后执行多次,然后看Activities的数据变化
adb shell dumpsys meminfo 包名
图1.jpg

执行完后看到一连串到数据,图1 只是截了其中一部分图,因为我们这里只要关注 Objects中的Activities 当它数值大于1的时候,大概就发生了Activity的内存泄露,

3.当内存发生了泄露,我们使用命令获取app当前的内存文件
adb shell am dumpheap 包名 文件路径
//例如:adb shell am dumpheap com.example.paginglist /data/anr/xyz.hprof

//这个Android的与标准的java hprof文件格式标准不一样,我们需要转换一下
//通过platform-tools 中的hprof-conv 把刚才生成的hprof文件转换成mat可识别的文件
hprof-conv  old.hprof  new.hprof

4.后续我们只需要把转换后的new.hprof 放入MAT进行内存分析。关于MAT的使用网上有很多的使用教程,就不重复了。

你可能感兴趣的:(adb查找内存泄露)