首先说3个测试内存泄露的三个动作,内存GC,退出测试app,关闭测试APP的进程的区别;
内存GC系统回收是回收无用的对象占用的空间,退出测试app不一定会就会GC,关闭测试APP直接就是所有内存都释放了,所以在测试内存过程中,要使用GC进行内存释放;
monkey压力测试内存泄露检查步骤如下:
一、搭建环境
要有SDK的配置环境,MAT内存分析工具(下载地址:https://pan.baidu.com/s/1rQ6A-DWEWWy2ZrPoJ78AAQ 密码:o0ls )
测试的apk一定要为debug包
二、monkey运行
根据业务场景用monkey进行压力测试,因为monkey是无理性随便点击会发现有很多重复性很高的操作,针对这个现象想到了内存分析~
注意:monkey 命令中不要使用忽略崩溃跟忽略超时错误关键词,命令为-ignore-crashes ,-ignore-timeouts,不然会导出的内存不是整体操作,因为闪退内存就释放了,
monkey运行,手机连接电脑,并且打开ddms的内存监控,运行结束后,点击GC
三、内存文件的获取跟转换
进入dos 输入命令:adb shell am dumpheap app包名 /data/local/tmp/xx.hprof (目的是生个一个hprof文件)
生成后你可以直接到手机data/local/tmp 进行查看有没有生成XX.hprof,然后把手机生成的hprof文件pull到本地电脑上,然后进入到改文件的目录下进行内存文件转化
转化命令为 hprof-conv xxx.hprof xxxx_1.hprof,其中xxx_1.hprof就是MAT内存工具要打开的内存文件。
具体案例步骤如下几图:
四、用MAT软件打开文件进行分析是否内存泄露常规方法
MAT软件打开内存文件后,一般有三种
1.Histogram
输入关键词activity,然后进行过滤,对于看Objects实例多的,进行分析,疑似内存泄露的,直接右击 选择Merge Shortest Paths to GC Root,并在选项中选择exclude all phantom/soft etc. references 。然后分析具体哪里内存泄露
2.Dominator Tree
输入关键词activity,然后进行过滤,会看到很多重复的activity,然后进行分析,发现疑似内存泄露的,就直接右击 选择Merge Shortest Paths to GC Root,并在选项中选择exclude all phantom/soft etc. references ,然后分析具体哪里内存泄露
3.OQL
输入:select * from instanceof android.app.Activity ,然后点击执行红色!图标
显示重复的Activit多的进行分析,发现疑似内存泄露的,就直接右击 选择Merge Shortest Paths to GC Root,并在选项中选择exclude all phantom/soft etc. references ,然后分析具体哪里内存泄露
三个方法图标
右键选择GC
另外:也可以进行文件对比,但前提就是 A操作完GC,生成内存文件1,然后继续操作,GC,再生成文件2,文件转换后,用MAT打开,选择Histogram,然后Navigation History 进行添加对比
总结:以上是我个人对Android 内存泄露 测试一些见解,小弟菜鸟一枚,有错误的,欢迎反馈,另外内存泄露也可以用ddms工具或者adb等方式测试内存~~