Android应用性能测试
Android用户也许会经常碰到以下的问题:
1)应用后台开着,手机很快没电了——应用耗电大
2)首次/非首次启动应用,进入应用特别慢——应用启动慢
3)应用使用过程中,越来越卡——CPU能力不足/内存泄露
4)应用页面卡顿——帧率较低、页面卡顿
因此,对开发的Android应用,必须对其进行性能测试,不然将会直接影响用户体验。
一.启动时间
启动时间同样也遵循2-5-8原则,所谓2-5-8原则就是当用户能够在2秒以内启动应用进入第一帧,会感觉系统的响应很快;当用户在2-5秒之间得到响应时,会感觉系统的响应速度还可以;当用户在5-8秒以内得到响应时,会感觉系统的响应速度很慢,但是还可以接受;而当用户在超过8秒后仍然无法得到响应时,会感觉系统糟透了,或者认为系统已经失去响应,而选择退出这个app或者卸载该app。因此启动时间对用户的使用行为起到至关重要的作用。
这里启动时间分两种情况:首次启动(冷启动)和非首次启动(热启动)应用所花费的时间。
在测试app启动时间之前,我们先来看看这张经典的Activity生命周期图,如图1。
图1 Activity的生命周期
流程简介:
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
从Activity的生命周期流程图,我们可以看出启动时间即onCreate()方法开始执行到onResume()方法执行结束的时间,也就是activity完全启动的时间。
那么怎么获取该时间?
方法一:通过logcat中ActivityManager的相关数据获取。
1)ddms设置过滤条件“by Log Tag”为:ActivityManager;
2)启动app,查看通过DDMS抓取到的log。
以2345王牌浏览器app为例,可查看获得log如下:
除了通过DDMS抓取外,还可以通过adb logcat命令来获取。
>adb logcat -d -s ActivityManager|findstr "Displayed">D:\log.txt
其实两者获取到的信息是一样的(这里演示时非同一次启动,因此启动时间有点差异)。只是DDMS抓的通常是main缓存中的,也就是应用程序打印的日志文件,可以实时查看。而通过命令抓取的话,只能重定向到文件,抓完之后才能查看。
方法二:adb命令获取,在前面的博文常用的adb命令中对adb shell也有些许介绍。
1)获取app包名和类名
>adb shell dumpsys activity|findstr mFocusedActivity
2)获取启动时间
>adb shell am start -W –n <packageName>/<activityName>
通过比较,可以发现这两种方法获取到的时间是一样的。(注意:这两种方法都是同一次启动,非同一次启动,会有差异)
对于这几个时间,这里引用知乎作者Gracker答案中的结论:“如果只关心某个应用自身启动耗时,参考TotalTime;如果关心系统启动应用耗时,参考WaitTime;如果关心应用有界面Activity启动耗时,参考ThisTime。”
二.性能测试工具——Emmagee
Emmagee是一款简单易用的Android性能检测小工具,主要用于监控单个App的CPU,内存,流量,启动耗时,电量,电流等性能状态的变化。
1)通过官方网站安装(个别机型目前不支持),设置“应用退出后台后仍可监听”便于自动化测试。
2)通过adb命令在sdcard目录下pull出测试结果csv文档(也可通过app配置邮箱,发送到自己的邮箱)。
3)查看测试结果csv文档,这里以百度浏览器app为例,测试结果如下。
注释:
已知部分不支持的机型可在此查阅:https://github.com/NetEase/Emmagee/wiki/Some-devices-are-not-supported
电流: 小于0是放电大于0是充电
启动时间: 为空是应用已启动或者未搜集到启动时间
N/A: 不支持或者数据异常
4)利用excel的功能生成统计图,方便分析。
该工具测试的结果可作为测试参考,另外对于帧率还可以用FPS Meter工具进行测试。
三.利用adb命令监测app相关性能信息
在这里就不一一演示了。
//内存使用率 1.adb shell dumpsys meminfo <pakagename> 2. 通过android提供的API来测试(ActivityManager.MemoryInfo())//CPU占有率 1.adb shell top 2.adb shell dumpsys cpuinfo//功耗 1.adb shell dumpsys battery 2.通过android本身的API来测试(ProwerManager.WakeLock)//查看总体的CPU占用 # cat /proc/stat//查看进程的CPU占用 # cat /proc/<PID>/stat//查看总体的RAM # cat /proc/meminfo | head -n 4//查看进程的RAM # dumpsys meminfo <packagename> # dumpsys meminfo <PID>//查看进程的当前RAM # procrank//开机后的总流量(字节数) # cat proc/self/net/dev//上传流量/上行流量 # cat /proc/uid_stat/2000/tcp_snd//下载流量/下行流量 # cat /proc/uid_stat/2000/tcp_rcv
四.稳定性测试/压力测试
在前面的博客常用的adb命令中介绍过adb shell monkey来对app进行压力测试,请参考。
五.其他
在这里推荐两个云测平台:
1.itestin
2.腾讯优测
参考文献:
1.Android Activity生命周期:http://kb.cnblogs.com/page/70125/
2.Emmagee官网:https://github.com/NetEase/Emmagee/releases
Android应用性能测试相关推荐
- Android 终端性能测试
Android 终端性能测试--内存篇 使用Memory Analyzer tool(MAT)分析内存泄漏(一) 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
- 移动端 - Android客户端性能测试常见指标
rom版本的性能测试 一般关注功耗(不过 rom 版本的功耗测试跟应用的功耗测试会有所差异,当然只是用例设计方面的差异,工具仍然采用安捷伦电源仪进行) 应用的性能测试 包括很多测试项,如启动时间.内存 ...
- Android app 性能测试以及专项测试
1. 性能测试 Android性能测试分为两类: 1.一类为rom版本(系统)的性能测试 2.一类为应用app的性能测试 Android的app性能测试包括的测试项比如: 1.资源消耗 2.内存泄露 ...
- Android App 性能测试工具GT
GT(随身调)腾讯出品的开源调试工具,是APP的随身调测平台,它是直接运行在手机上的"集成调测环境"(IDTE, IntegratedDebug Environment).利用GT ...
- Android app性能测试小结(7个性能指标)
.性能测试的几个指标: 性能测试环境准备: 启动时间 监控值的获取方法 启动分为冷启动和热启动,冷启动:应用程序首次启动,进程首次创建并加载资源的过程:热启动:应用程序启动后点"back&q ...
- 推荐一款仿Perfdog免费的Android/iOS性能测试工具-SoloX
SoloXGitHub - smart-test-ti/SoloX: SoloX - Real-time collection tool for Android performance data.(移 ...
- android gpu性能测试,CPU/GPU以及整体性能测试_手机_手机Android频道-中关村在线
CPU/GPU以及整体性能测试 由于ME525采用的是Android2.2操作系统,因此在功能上没有缺失.我们在测试当中看到ME525的国内版本Android2.2.1,编码为2.6.32.而在设置当 ...
- Android客户端性能测试(一):使用APT测试Android应用性能
一.APT介绍: APT:Android Performance Testing Tools,适用于开发自测和定位性能瓶颈,帮助测试人员完成[性能基准测试.竞品测试]. APT提供了CPU利用率实时曲 ...
- 五款热门Android手机性能测试 Nexus S大胜
包括笔者在内的很多朋友在买手机之前都爱关注下机器的配置和性能,一款手机测试得分多少是我们非常关注的重点,日前有国外媒体测试了包括Nexus S在内的五款热门Android手机,测试主要通过最新发布的G ...
最新文章
- 嵌入式软件工程师笔试题(含答案)
- WIN7系统开题提示loli.vbs 操作超时怎么办
- lambda 函数与 Generator 函数
- 如何通过信息系统项目管理师+中级备考经验
- VTK:Utilities之DiscretizableColorTransferFunction
- 《JavaScript入门经典(第4版)》上第5章一个实例程序的修正,完善
- CSS篇 第9章 Visual Formatting Model 部分翻译
- node --- 监听文件变化(静态、动态、子进程)
- hadoop 集群启动时 Address already in use 解决方法
- mariadb备份与恢复工具
- Nsight Compute内存访问常用Metrics含义理解
- 基于卡尔曼滤波器的回声消除算法
- 使用 TF-IDF 算法将文本向量化
- ajax中的callback,ajax callback是什么
- 计算机网络没有接收什么情况,电脑网络连接失败 网卡只有发送没有接收该怎么办?...
- Python Re 正则表达式 数据匹配提取 基本使用
- 初识angular.js之爱恨情仇
- opencv实战项目:基于opencv的车牌号码识别
- 深入理解Java注解(二)——JavaPoet使用
- 反复调整,苹果的价格策略还奏效吗?
热门文章
- wifi 荣耀手机usb_【已解决】电脑端Win7通过WIFI无线网络共享操作安卓手机华为荣耀6的文件...
- 空间谱估计matlab实现,相干信号空间谱估计测向Matlab仿真研究
- L1-070 吃火锅 (15 分) 吃火锅 (字符串)
- 如何制作抖音短视频搬运RPA机器人?
- Hibernate配置时易忘掉的一项-release_mode
- 成功解决(Socket error occurred: localhost/127.0.0.1:2181: Connection refused)连接zkServer被拒绝的问题
- 免费实时语音识别和即时翻译软件
- 电脑截图方法快捷键等介绍
- 如何在Ubuntu16.04进行直播的完美教程(OBS Studio 21.1安装)
- Spring父子上下文的使用案例