在网上看到大部分都是集成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的使用网上有很多的使用教程,就不重复了。
网友评论