Android 应用内存泄露排查流程

版权声明:本文为博主原创文章,未经博主允许不得转载。讨论QQ群:372702757 https://blog.csdn.net/wenwen091100304/article/details/79516982

前言

  最近为了对自己负责的APP做优化,特地研究了一下内存泄露分析常用的方法,这里简单的总结一波。

基本流程

第一步、确定内存泄露的基本范围

  Android Studio很早以前就有直接查看内存使用的情况的Memory Monitor,因此我们可以通过观察我们的某一个操作的执行与返回,是否是内存不断的增加,如果是,则表明有内存泄露的嫌疑。据此,我们可以找到内存泄露的一个基本范围。如下:
  第一操作:
  第一次操作
  第二次操作:
  第二次操作
  第三次操作:
  这里写图片描述
  像这样,我们可以看出内存并没有变化多少,因此可以确认,这个页面是没有内存泄露的,相反,如果我们反复操作某个页面,如果内存不断增加,我们则可以确定这个页面有内存泄露。

第二步、抓取存在内存泄露的嫌疑的内存快照

  通过Android Studio的内存抓取工具,我们可以生成我们应用一段时间的内存的使用情况的报告,Android Studio也帮我们我们做了简要分析,我们从中也可以了解一些。点击按钮抓取:
  这里写图片描述
  Android studio 帮我们分析的的结果:
  这里写图片描述
  我们可以从分析结果中看出我们自己的每个类有多少实例,多少个引用,分析是否合理,从而确定内存泄露的地方。

第三步、对比两次抓取的结果

  为了获取到更详细和准确的分析结果,我们使用MAT( Memory Analysis Tools)可以对比两次相同操作的内存使用情况,然后进行分析,基本可以确定哪些地方产生了内存泄露。
  将第二步中抓取的文件导出为xxx.hprof的文件。
  这里写图片描述
  随后我们需要对导出来的文件做一次转换,因为直接导出来的文件不够标准。转换命令如下:
  这里写图片描述
  最后我们通过MAT工具,打开标准的XXX.hprof文件,进行分析;
  MAT工具下载
  MAT工具分析的详细说明

其它方法

现在也可以直接利用第三方库进行内存泄露分析,就是著名的Leakcanary,需要通过在项目中集成,使用方法也比较简单,大家可参照github上的使用说明进行操作。它可以图形化的提示我们,哪个页面有内存泄露,以及具体的泄露原因;

猜你喜欢

转载自blog.csdn.net/wenwen091100304/article/details/79516982