Android 配合Mat工具监听查找内存泄漏的操作方法
1、Android Studio Profiler查看内存
内部培训做个记录
运行我们的项目,然后一直玩APP。最后在Android Studio Profiler中选择memory。执行如下操作:
会得到如下图示。
从图中可以看出,目前存在47个泄漏情况。点击数字47 会得到app heap内存泄漏的详细类。
某一个类泄漏了17次。
右键到处hprof文件。
2、hprof文件转换
进入到Android SDK的platform-tools目录下 执行如下命令
hprof-conv memory.hprof 11.hprof
3、MAT定位泄漏原因
打开mat软件,选择file 导入刚刚生成的11.hprof文件
点击
输入你需要查看的泄漏类的正则
这儿我输入activity。找到我们自己的activity,这个时候右键该类。选择Gc roots 然后exclude all phantom/weak/soft etc.references(这步操作的目的是排除软弱虚引用,因为我们知道内存泄漏的问题都是由强引用导致的)
从图中可以看出 我们项目有个lifecycleRegister类持有了activity保存在fragmentCallback中,而得不到释放。
4、回到代码排查原因
最后在代码中我看到我们的fragmentCallback一直保存数据,但是没有地方释放,在释放的位置activity.finish()即可。至此解决问题
即堆中存在不再使用的对象,但垃圾收集器无法将它们从内存中删除
到此这篇关于Android 监听查找内存泄漏 配合Mat工具的文章就介绍到这了,更多相关android内存泄漏Mat内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Android使用Volley框架定制PostUploadRequest上传文件
这篇文章主要为大家详细介绍了Android使用Volley框架定制PostUploadRequest上传文件或图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-12-12Android RecyclerView详解之实现 ListView GridView瀑布流效果
RecyclerView 是Android L版本中新添加的一个用来取代ListView的SDK,它的灵活性与可替代性比listview更好2016-07-07Android10 客户端事务管理ClientLifecycleManager源码解析
这篇文章主要介绍了Android10 客户端事务管理ClientLifecycleManager源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-10-10Android的简单前后端交互(okHttp+springboot+mysql)
这篇文章主要介绍了Android的简单前后端交互(okHttp+springboot+mysql),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-05-05
最新评论