前言
最近为了对自己负责的 APP 做优化, 特地研究了一下内存泄露分析常用的方法, 这里简单的总结一波
基本流程
第一步确定内存泄露的基本范围
Android Studio 很早以前就有直接查看内存使用的情况的 Memory Monitor, 因此我们可以通过观察我们的某一个操作的执行与返回, 是否是内存不断的增加, 如果是, 则表明有内存泄露的嫌疑据此, 我们可以找到内存泄露的一个基本范围如下:
第一操作:
第二次操作:
第三次操作:
像这样, 我们可以看出内存并没有变化多少, 因此可以确认, 这个页面是没有内存泄露的, 相反, 如果我们反复操作某个页面, 如果内存不断增加, 我们则可以确定这个页面有内存泄露
第二步抓取存在内存泄露的嫌疑的内存快照
通过 Android Studio 的内存抓取工具, 我们可以生成我们应用一段时间的内存的使用情况的报告, Android Studio 也帮我们我们做了简要分析, 我们从中也可以了解一些点击按钮抓取:
Android studio 帮我们分析的的结果:
我们可以从分析结果中看出我们自己的每个类有多少实例, 多少个引用, 分析是否合理, 从而确定内存泄露的地方
第三步对比两次抓取的结果
为了获取到更详细和准确的分析结果, 我们使用 MAT( Memory Analysis Tools) 可以对比两次相同操作的内存使用情况, 然后进行分析, 基本可以确定哪些地方产生了内存泄露
将第二步中抓取的文件导出为 xxx.hprof 的文件
随后我们需要对导出来的文件做一次转换, 因为直接导出来的文件不够标准转换命令如下:
最后我们通过 MAT 工具, 打开标准的 XXX.hprof 文件, 进行分析;
MAT 工具下载
MAT 工具分析的详细说明
其它方法
现在也可以直接利用第三方库进行内存泄露分析, 就是著名的 Leakcanary, 需要通过在项目中集成, 使用方法也比较简单, 大家可参照 github 上的使用说明进行操作它可以图形化的提示我们, 哪个页面有内存泄露, 以及具体的泄露原因;
来源: http://blog.csdn.net/wenwen091100304/article/details/79516982