Android性能测试--内存

Posted 安大叔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android性能测试--内存相关的知识,希望对你有一定的参考价值。

前言:

近阶段都在探索android性能测试方面的东西,其中一个很重要的指标就是内存。对于内存,主要是一些gc是不是及时,或者说一些引用有没有及时释放,有没有导致oom或者内存持续增加导致卡顿,有没有大规模的内存抖动。近期项目由于个别模块大改,所以也就想把性能测试的东西在实际项目中实践进去,本文就是针对实践过程进行一下分享。

Memory Monitor:

1.1内测实时显示监控

Memory Monitor是android studio自带的一个非常好用的一个检测内存变化的工具,他能实时监控针对于某个进程的内存变化,帮助我们来判断内存是否及时释放,以及carsh是否超出了内存阀值。当然你也可以手动进行gc,看对象是否有得到释放。

这里是针对pris云阅读thread所进行的实时内存监控,通过一些列侧滑切换资讯正文后内存发生的变化,可以看到内存持续上升,且返回首页后仍没有明显下降,那么这里的确是出现了一系列问题,是应该关注的内存的问题。

1.2dump java heap

Memory Monitor中dump java heap,能够dump一段时间内的.hprof文件来进行对象分析,看看是什么对象占用了大量内存

1.3start allocation tracking

Memory Monitor中start allocation tracking 可以手机alloc文件,其中强大的图标数据,反应了一些线程的具体内存占用情况,是一个很好的分析工具,在使用Memory Monitor过程中可以具体使用Allocation Tracker来对thread进行内存分析,分析哪些activity其中对象的占用内存情况。

 

LeakCanary:

LeakCanary是一个开源的内存检测工具,下面是结合阅读项目的具体实践。

2.1编辑build.gradle

需要加入具体依赖

debugCompile \'com.squareup.leakcanary:leakcanary-android:1.3.1\'
releaseCompile \'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1\'

这里需要说明一下,gradle依赖需要翻墙,不翻墙很有可能失败,最好用公司网络(虽然说失败过很多次,但还是可以成功的)或者vpn,声明后重新构建去下载依赖

2.2编辑Application.class开启LeakCanary

该类即androidManifest中声明的application类(自定义的会居多,具体可以从androidManifest查看)

在复写的oncreate()方法中加入如下代码:

LeakCanary.install(this);

 

2.3安装应用到手机

在安装阅读app的同时,会在手机中安装一个监控app

 

2.4测试apk

此时就可以开始日常测试啦,若有内测泄漏,会有toast提示正在dump数据

打开leak app就可以看到一条具体的内测泄漏信息(这里在toast提示之后会有一定的延迟,过一会儿才会在leak app显示)

 

这里具体定位到具体tread和activtiy,你还可以借助heap dump数据进行mat工具分析

这里的例子是引用的对象没有释放造成的MainGridActivity页面的内存泄漏

2.5可share一些数据文件

这里提供share heap dump文件

 

从git的源码可以看到,dump的.hprof文件在sdcard/Download/leakcanary目录下,你也可以通过adb shell下进行查看,并且pull到pc端来进行分析

LeakCanary开源地址:https://github.com/square/leakcanary 

借助LeakCanary可以很好的反馈测试过程中的内存泄漏情况,以助于排查一些对象没有及时释放导致oom的情况。

本文为作者原创

禁止其他公众账号转载

以上是关于Android性能测试--内存的主要内容,如果未能解决你的问题,请参考以下文章

Android应用性能测试之CPU和内存实时监测

Android客户端性能测试—内存先码

Android性能测试(内存、cpu、fps、流量、GPU、电量)——adb篇

APP性能(Android手机):内存和CPU

Android APP性能测试

Android 性能测试——Memory Monitor 工具