【Android端 APP 内存分析】使用工具进行APP的内存分析

Android端可以通过adb 命令直接获取内存信息,当然Android studio也提供了对内存的监控分析工具,并且后续可以结合MAT做分析

今天介绍的是通过Android studio和MAT工具进行分析的方法:

1、通过Android studio打包之后,app安装成功

2、点击 Android Monitor,具体见下图:

 

运行APP成功之后,就能看到下图中所示,说明APP的进程已经启动起来了,然后就可以进行操作和观察数据了

 

看到Android Monitor里面能够监控的数据有:CPU、内存、网络、以及GPU

3、查看内存这一栏:

 

看到以5s为间隔,曲线图会一直变化,其中深蓝色代表已经分配的,浅蓝色代表free的

进行多次反复操作,例如进入APP之后再正常退出,观察内存数据,如果内存一直在增长,就可以初步判定可能有问题

点击下方的这个卡车,强制gc,之后点击卡车后面的第一个图标,将鼠标放上去之后,能够看到 dump java heap的tips,

 

之后会生成一个hprof的文件,见下图:

 

然后可以点击 Analyzer Tasks就可以将Analyzer Tasks的项展开,

 

之后就能看到下方这个图,勾选Analyzer Tasks下方的两个内容,分别是检测Leaked Activities和Find Duplicate Strings

 

之后点击右边的绿色三角按钮,就可以获得结果,点击展开Leaked Activities,就可以看到其中泄漏的Activity对象

 之后可以使用MAT工具,对这个hprof文件进行转换,然后通过MAT工具进行分析;

hprof文件的地址在项目目录的 captures目录下

 找到这个文件,对文件进行格式转换,通过sdk工具中的platform-tools/hprof-conv.exe进行格式转换:

通过cmd命令行即可:hprof-conv from.hprof to.hprof

之后生成的这个hprof文件就可以用MAT打开了,更具体的分析可以见下方数据内容:

 

内存分析时,其实不一定是内存泄漏就会有问题,内存泄漏指的是一些对象在强制gc之后依然没有被释放,但是程序本身的对象申请空间比较大,或者是多次操作总是不释放,这样的也会出现问题。

一些容易出现内存问题的场景:

1、存在多图片的页面,或者需要申请较大空间的情况(比如切换tab时)

2、存在listview的页面,listview的复用及及时释放等

3、Activity不发生变化的页面,但数据会不变更新的逻辑

原文地址:https://www.cnblogs.com/keke-xiaoxiami/p/6187864.html