本文围绕以下性能指标介绍测试Android端的测试方法:

  • 启动时间:启动APP所需时间
  • 流畅度:也称为帧率FPS,指画面每秒传输帧数;帧率越大,页面越流畅。
  • 过渡绘制:过度绘制描述的是屏幕上的某个像素在同一帧的时间内被绘制了多次。
  • 内存:占用系统内存的大小
  • CPU:对系统CPU的占用率
  • 流量:流量消耗

性能标准及Android如何获取数据

1.CPU:

静态不超过5%,后台静默不超过1%,一般运行状态不超过30%,高负荷运行不超过75%,峰值不超过90%;

1.1 数据获取

  • 每隔1s获取对应app的cpu占用
  • adb shell top –d 1 | grep “包名”
  • adb shell dumpsys cpuinfo  | grep “包名”

秀秀app占用总cpu的0.8%,在用户(user)中花0.6%的时间,并在内核空间(kernel)花费0.1%的时间

1.2cpu检测的几种情况

  1. 空闲状态下的应用CPU消耗情况(程序运行后按home键挂后台)
  2. 中等规格状态下的应用CPU消耗情况(程序执行普通操作时的cpu占用)
  3. 中等规格状态下长时间的应用CPU消耗情况
  4. 满规格状态下的应用CPU消耗情况
  5. 针对性的场景测试

例如对软件使用较多的场景进行测试

2. 内存

  • 操作单次申请pss内存超过50M需查看是否合理,java堆内存单次操作申请内存不超过20M;
  • 不存在内存抖动问题,频繁GC;
  • 不存在内存持续增长问题,内存泄漏;
  • 不存在一段时间内存持续增长后无法释放问题,如位图未释放或重复缓存;
  • 返回mainActivity后不存在其他Activity实例;
  • hprof(内存快照),只可分析java层泄漏

2.1 数据获取

获取对应app的内存占用

adb shell dumpsys meminfo “包名”

2.2内存检测的几种情况

(1) 空闲状态下的应用内存消耗情况(程序运行后按home键挂后台)

(2) 中等规格状态下的应用内存消耗情况(注意查看是否申请的内存过大)

(3) 满规格状态下的应用内存消耗情况

(4) 针对性的场景测试

较容易出现内存泄漏的部分场景:

  • activity间的切换,只要非静态的匿名类对象没有被回收,MainActivity就不会被回收,MainActivity所关联的资源和视图都不会被回收,发生比较严重的内存泄漏。
  • 连续查看和发送大图片,不断反复观看返回继续观看等操作,都有可能因为和之前的内存资源没释放而导致内存不断增长。
  • 有执行异步线程的场景后如果未给线程进行结束,会引起内存泄漏,因为activity的结束销毁不会把正在运行的thraead也结束回收掉。比如后台下载或加载东西时关闭activity。
  • 在activity关闭时Handler还没结束,会到导致内存泄漏。例如一些界面UI还在刷新时关闭activity。
  • 从登录界面登录账号后,登录界面的activity只是退到后台或是被登录后的activity覆盖,像这种过渡界面的acticity容易出现未去摧毁而出现内存泄漏。

对内存泄漏测试后期可预研使用LeakCanary,结合jenkins,定时取版本源码接入LeakCanary后执行monkey测试,查看是否能检查到内存泄露信息(此方法需要提供源码)。

2.3测试标准

测试场景中内存不会出现持续上升或短时间内出现内存抖动情况和无故申请过大内存的情况

3.启动时间(native)

  • 应用冷启动<=600ms为优秀,<=800ms为良好,<=1000ms为可接受;
  • 应用热启动<=200ms为优秀,<=400ms为良好,<=600ms为可接受;

3.1 数据获取:

  • 获取activity的方法:

1) 日志打印:获取运行中的activity,同时存在耗时的+279ms

adb logcat ActivityManager:I *:s 

2)获取当前页面的activity

adb shell dumpsys activity | grep mFocusedActivity
  • 通过adb shell am start -W –S –n <activity> 获取应用首次启动时间
  • 通过adb shell am start –W –n <activity> 获取应用二次启动时间

使用am命令获取的时间只是apk从onCreate到onResume的时间,但不包含UI界面呈现出来的时间,所以考虑计算从am命令执行到logcat中有displayed出现的时候, 视为app已经启动并展现,作为结束时间。后面对该方法验证是否可行。

3.2 App启动时间检测的几种情况

(1) 首次启动时间

(2) 非首次启动时间

3.3测试标准

首次启动时间<=600ms为优秀,<=800ms为良好,<=1000ms为可接受

二次启动时间<=200ms为优秀,<=400ms为良好,<=600ms为可接受

横向对比(与竞品对比)和纵向对比(与以往版本对比)

4.响应时间(native):

Activity切换时间<=100ms为优秀,<=200ms为良好,<=500ms为可接受;

4.1 数据获取

硬件:通过高速相机

软件:通过logcat日志的Displayed关键字

adb logcat >~/qiehuan.txt |grep Displayed

4.2Activity切换时间检测的几种情况

  1. 各主要场景页面的切换
  2. 关注一些一进入就需要进行加载的activity
  3. 针对性的场景测试

例如其他一些需要关注的页面切换等

4.3测试标准

Activity切换时间<=100ms为优秀,<=200ms为良好,<=500ms为可接受

横向对比(与竞品对比)和纵向对比(与以往版本对比)

5. 流畅度

  • 帧率<=50需优化,>=55为良好,>=57为优秀;
  • 不出现连续丢帧情况;

5.1 数据获取

1.手机开启开发者模式,开启“GPU呈现模式分析”,选择“在adb shell dumpsys gfxinfo中”

2.获取数据计算滑动帧率和掉帧数

adb shell dumpsys gfxinfo “包名” 

如上图信息表示了每一帧在安卓系统中的四个阶段:

Draw: 表示在Java中创建显示列表部分中,OnDraw()方法占用的时间

Prepare: 准备时间

Process: 表示渲染引擎执行显示列表所花的时间,view越多,时间就越长

Execute: 表示把一帧数据发送到屏幕上排版显示实际花费的时间,其实是实际显示帧数据的后台缓存区与前台缓冲区交换后并将前台缓冲区的内容显示到屏幕上的时间

将上面的四个时间加起来就是绘制一帧所需要的时间,如果超过了16.67就表示掉帧了

说明

Android定义了流畅度的数据标准,以60FPS为标准(FPS为每秒绘制的帧数),帧数过小就会出现卡顿感

每一帧在安卓系统中分4个阶段,4个阶段的总和超过16.67(1秒60帧,算下来平均1帧的间隔就约是16.67ms)就认为丢帧

这个定义在Android6.0以前是一定的,但是现在已经没有固定的标准了,因为目前安卓系统有3层缓存机制,加上硬件上的进步,即使超过16.67,也不一定会出现卡顿感。所以这个数据在测试时作为一种对比和相对衡量标准,也可根据需求自定义标准。


帧率计算方法如下:

Draw Prepare Process Execute sum(计算和) 帧率(1000/sum)
3.78 0.55 6.61 4.02 14.96 66.84491979
1.62 1.6 7.42 15 25.64 39.00156006
3.76

0.5

5.45 3.21 12.92 77.3993808
1.23 0.56 5.41 8.71 15.91 62.85355123
1.01 0.52 5.89 10.1 17.52 57.07762557
1.13 0.51 5.38 11.33 18.35 54.49591281
1.35 1.05 6.8 8.25 17.45 57.30659026
2.29 0.54 6.16 9.15 18.14 55.12679162
1.19 0.55 6.15 9.99 17.88 55.92841163
1.51 0.52 6.08 10.7 18.81 53.16321106
1.42 2.16 6.59 2.42 12.59 79.42811755
2.56 0.61 6.23 2.73 12.13 82.44023083
1.59 0.55 6.53 2.51 11.18 89.44543828
1.1 0.51 6.37 1.61 9.59 104.2752868
1.36 0.55 6.93 1.52 10.36 96.52509653
1.35 0.54 7.35 2.24 11.48 87.10801394
1.79 0.52 6.85 4.71 13.87 72.09805335
2.09 0.49 13.39 4.28 20.25 49.38271605
1.05 0.24 7.33 7.97 16.59 60.27727547
1.87 0.25 5.15 10.8 18.07 55.34034311
6.64 1.13 5.59 4.66 18.02 55.49389567
1.33 0.26 6.12 10 17.71 56.46527386
0.69 0.24 6.18 11.6 18.71 53.44735436
1.03 0.53 4.6 10.64 16.8 59.52380952
1.38 0.49 6.72 9.38 17.97 55.64830273
0.73 0.24 6.36 9.86 17.19 58.1733566
0.79 0.27 4.85 11.63 17.54 57.01254276
1.91 0.5 4.07 11.8 18.28 54.70459519
0.77 0.5 7.14 9.61 18.02 55.49389567
0.72 0.48 3.79 11.6 16.59 60.27727547
1.05 0.51 9.67 7.22 18.45 54.20054201
0.74 0.25 3.88 11.34 16.21 61.69031462
0.77 0.24 4.97 11.44 17.42 57.40528129
1.04 0.27 4.89 12.4 18.6 53.76344086
0.98 0.52 5.84 9.61 16.95 58.99705015
2.36 0.56 7.19 8.7 18.81 53.16321106
1.18 0.56 9.23 5.42 16.39 61.01281269
3.14 0.54 6.95 7.72 18.35 54.49591281
1.46 0.53 7.08 11.94 21.01 47.59638267
2.15 0.55 6.07 5.95 14.72 67.93478261
0.68 0.56 4.07 12.61 17.92 55.80357143
2.16 0.56 5.85 13.57 22.14 45.16711834
1.14 0.55 7.56 4.68 13.93 71.78750897
2.03 0.55 7.73 7.89 18.2 54.94505495
2.35 0.51 8.85 7.92 19.63 50.94243505
1.84 0.24 7.77 6.99 16.84 59.3824228
0.74 0.5 3.74 12.1 17.08 58.54800937
0.63 0.23 4.83 12.57 18.26 54.7645126
1.2 0.49 5.91 9.46 17.06 58.61664713
1.03 0.55 6.22 12.73 20.53 48.70920604
1.07 0.53 6.02 8.36 15.98 62.57822278
1.65 0.49 6.34 8.58 17.06 58.61664713
2.31 0.6 7 10.27 20.18 49.55401388
1.07 0.52 4.52 9.48 15.59 64.14368185
0.66 0.49 4.37 1.59 7.11 140.6469761
1.52 0.5 8.39 2.69 13.1 76.33587786
1.14 0.54 6.69 7.34 15.71 63.65372374
2.92 0.52 7.7 2.4 13.54 73.85524372
1.8 0.56 6.11 9.01 17.48 57.20823799
0.99 0.57 3.62 11.81 16.99 58.85815185
0.77 0.52 5.36 9.74 16.39 61.01281269
0.72 0.48 8.96 1.8 11.96 83.61204013
0.67 0.45 3.75 2.41 7.28 137.3626374
2.74 0.47 9.7 7.5 20.41 48.9955904
0.67 0.47 6.22 3.62 10.98 91.07468124
0.61 0.48 5.39 8.06 14.54 68.77579092
3.15 0.55 6.04 1.82 11.56 86.50519031
1.73 0.48 5.62 1.5 9.33 107.1811361
3.03 0.47 5.53 8.67 17.7 56.49717514
3.66 0.5 6.55 5.06 15.77 63.4115409
3.12 0.57 6.8 2.76 13.25 75.47169811
2.25 0.54 7.27 6.43 16.49 60.64281383
1.92 0.51 7.45 4.07 13.95 71.68458781
2.74 0.58 7.3 5.07 15.69 63.73486297
3.02 0.59 5.67 3.17 12.45 80.32128514
1.99 0.55 5.57 4.48 12.59 79.42811755
1.82 0.29 6.44 4.01 12.56 79.61783439
5.54 0.59 8.72 3.13 17.98 55.61735261
2.49 0.26 6.06 10.43 19.24 51.97505198
1.79 0.27 3.58 11.4 17.04 58.68544601
3.41 0.53 6.51 7.91 18.36 54.46623094
3.98 0.57 6.05 8.15 18.75 53.33333333
1.17 0.57 5.89 10.77 18.4 54.34782609
1.98 0.56 6.16 9.44 18.14 55.12679162
1.6 0.56 6.65 8.19 17 58.82352941
1.19 0.56 5.47 10.6 17.82 56.11672278
33.25 0.82 7.11 2.51 43.69 22.88853285
0.93 0.58 8.65 7.15 17.31 57.7700751
48.14 3.54 30.53 11.94 94.15 10.62134891
50 1 9.64 11.4 72.04 13.88117712
50 0.55 7.06 3.02 60.63 16.49348507
50 0.93 8.76 5.22 64.91 15.4059467
13.23 0.44 4.27 6.26 24.2 41.32231405
11.21 0.95 7.22 8.36 27.74 36.04902668
8.73 0.44 7.86 3.89 20.92 47.80114723
34.82 0.51 12.87 2.34 50.54 19.78630787
15.67 1.06 6.82 2.53 26.08 38.34355828
50 1.01 12.84 12.73 76.58 13.05823975
50 0.93 12.69 11.66 75.28 13.2837407
50 1.32 12.53 2.5 66.35 15.07159005
50 1.67 30.01 16.96 98.64 10.1378751
50 1.19 10.22 12.01 73.42 13.62026696
50 1.09 10.29 2.9 64.28 15.55693839
50 1.02 9.93 9.31 70.26 14.23284942
48.95 0.96 9.66 4.67 64.24 15.56662516
19.22 1.01 9.36 5.56 35.15 28.44950213
17.89 0.93 8.23 1.78 28.83 34.68609088
17.63 0.95 4 7.12 29.7 33.67003367
12.28 0.44 7.37 13.07 33.16 30.15681544
6.76 1.01 7.83 9.44 25.04 39.93610224
11.7 0.92 3.97 10.12 26.71 37.43916136
15.14 0.42 5.51 2.09 23.16 43.17789292
9.19 0.44 6.82 2.44 18.89 52.93806247
50 0.46 9.97 3.4 63.83 15.66661444
12.5 1.13 6.54 2.36 22.53 44.38526409
18.8 0.98 7.44 2.64 29.86 33.48961822
7.88 0.9 7.3 2.71 18.79 53.21979776
4.76 0.96 7.58 7.88 21.18 47.21435316
4.89 0.94 7.17 3.03 16.03 62.38303182
50 1.1 7.26 2.65 61.01 16.39075561

5.2滑动帧率检测的几种情况

  1. ListView界面的帧率
  2. 可滑动界面帧率,如长的textview或可滑动的长图等
  3. 动画较多的页面操作帧率
  4. 针对性的场景测试

可能引起掉帧的原因:

1.手机性能差,CPU + GPU工作效率低下

2.横竖屏切换,需要用savedInstanceState保存的view信息进行重画

3.动画效果太多

4.GC太多

5.UI线程阻塞

6.界面试图结构过于复杂(可以通过Hierachy View查看)

7.过度绘制

注意:如果只掉了一帧,但是这帧所占时间较长,比如占了几个垂直同步信号的时间,虽然总体的FPS值还不错,但依然能肉眼感知到这帧的卡顿,所以这种情况也需注意。

5.3测试标准

应结合手机硬件性能决定性能标准,但建议最低也要大于50,60为最高值

横向对比(与竞品对比)和纵向对比(与以往版本对比)

6.过渡绘制(卡顿、慢)

6.1 数据获取

进入开发者模式>点击显示GPU过度绘制

6.2GPU过渡绘制检测的几种情况

各/主要页面

针对性的场景测试

6.3测试标准

  1. 不允许出现黑色像素
  2. 不允许存在4X过渡绘制
  3. 不允许存在面积超过屏幕1/4区域的3X过渡绘制
  4. 动态页面、可滑动/滚动列表,还可参考CPU的数据

一些静态页面,一般是无法修改的

横向对比(与竞品对比)和纵向对比(与以往版本对比)

7.流量

7.1数据获取

adb shell cat /proc/#pid#/net/dev

7.2流量检测的几种情况

(1) 应用首次启动流量

(2) 应用后台长时间运行后的流量值

(3) 针对性的场景测试

例如发送接收图片,发送接收视频,刷新列表等操作

7.3测试标准

  • 不存在重复请求;
  • 页面静默时或处于后台不应有流量增加;
  • 缓存机制的逻辑合理;
  • 在移动网络下不应自动下载素材等数据;
  • 小缩略图小于5KB
  • 中缩略图小于25KB
  • 大缩略图小于50KB

欢迎交流点赞~

Android性能测试方法【硬核】相关推荐

  1. android性能测试方法

    [Android应用]性能测试方法 前言 Android设备的性能测试涉及面较广,且机型较多,所以Android设备的性能测试先天就是比较复杂的.此文力图以最简洁.最直接的方式阐述Android应用性 ...

  2. android java 时间测试方法_一个让你开挂的Android 性能测试方法

    Android性能测试,跟pc性能测试一样分为客户端及服务器,但在客户端上的性能测试分为2类,对于应用性能测试,包括很多测试项,如启动时间.内存.CPU.GPU.功耗.流量等.但针对rom版本的性能测 ...

  3. “硬核实力”2999元起,moto骁龙8旗舰全球首发

    12月9日晚,moto在北京联想总部召开了以"硬核实力"为主题的新品发布会.首发尝鲜价2999元起的moto edge X30正式发布.作为全球首发新一代骁龙8.首款跑分过百万的机 ...

  4. android 早期机甲游戏,《硬核机甲》见识一下国产机甲游戏的性能,崩坏3提供PC、安卓双端互通体验!...

    原标题:<硬核机甲>见识一下国产机甲游戏的性能,崩坏3提供PC.安卓双端互通体验! 提及<超级机器人大战>系列的2D战斗动画,想必不少喜爱机器人的玩家都会有印象,虽然其制作并不 ...

  5. android手机最低内存,安卓想用很久不卡顿?12GB内存是最低标准,这6款硬核配置还便宜...

    安卓手机不同于iPhone,由于系统底层逻辑,内存管理机制大不相同,同样是4GB内存,iPhone可能用三年也不会卡,但是换成安卓手机用半个月就开始卡了,所以对于安卓来说内存越大越好,如果你是奔着四年 ...

  6. 百度视频在Android和iOS端性能测试方法

    背景介绍 一直以来,性能测试是被一部分人遗忘,又让另一部分人无可奈何的东西.在绝大部分的创业公司,性能测试基本上都是被遗忘的,他们认为功能测试和稳定性测试才是重点,而在中等规模的公司中一部分测试人员考 ...

  7. 深入理解浏览器原理和架构|硬核

    本文用47张图带你了解「浏览器的发展史」.「浏览器的架构」.「浏览器的基本原理」以及 「浏览器的其它小知识」 ???? 正文开始 浏览器的主要功能就是向服务器发出请求,在浏览器窗口中展示HTML文档. ...

  8. kappa和lambda对比 | 程序员硬核评测

    戳蓝字"CSDN云计算"关注我们哦! 程序员硬核评测:客观.高效.不说软话.无论是技术质量.性能水平,还是工具筛选,一测便知! 作者:浪尖 转载:Spark学习技巧 首先我们会详细 ...

  9. 强推!盘点阿里巴巴 15 款开发者工具 | 程序员硬核评测

    戳蓝字"CSDN云计算"关注我们哦! 程序员硬核评测:客观.高效.不说软话.无论是技术质量.性能水平,还是工具筛选,一测便知! 从人工到自动化,从重复到创新,技术演进的历程中,伴随 ...

最新文章

  1. 关于OKR,你最关心的几个问题,答案在这里
  2. atomic 内存序_并行编程的内存顺序 2020-11-23
  3. 操作系统知识点总结以及期末考试考点
  4. docker系列之安装配置-2
  5. 期货与期权(part6)--保证金
  6. HangFire循环作业中作业因执行时间太长未完成新作业开启导致重复数据的问题...
  7. Pcm设备2M通道,E1的基础知识介绍
  8. Endnote自定义参考文献格式锦集
  9. 远程修改服务器登录密码,远程服务器修改登录密码
  10. [LeetCode] Number of 1 Bits 位操作
  11. android webview 播放swf 失败彻底解决黑框
  12. Thinkpad x200 X201拆机换风扇教程 实图
  13. Git之git pull【warning】Pulling without specifying how to reconcile divergent branches is
  14. 论文笔记:DELPHI:预测蛋白质相互作用位点的精确深度集成模型
  15. 最全面的PS快捷键使用指南(图文演示)
  16. 2022大厂真题盘点!190道大数据高频面试题+答案详解
  17. 设计一个重量转换程序 python
  18. lbs、agps流程
  19. win10计算机打开速度慢,win10电脑系统开机启动速度慢如何解决?
  20. 2022.10.9NYIST新生周赛题解

热门文章

  1. 阿里推荐系统:DSTN(一)
  2. Koodo Reader Mac开源免费Epub阅读器2020-10-24
  3. 学习前端框架Metronic
  4. RSA数据摘要+数字签名(Java)
  5. Mac款origin来了!还不来看看!
  6. TI AM5728 RTOS环境搭建笔记
  7. 头条系多闪:IM 战线上的另一块战场
  8. Android-GnssHal层gps.xxx.so查找与加载过程分析
  9. HP刀片服务器更换两个硬盘后无法引导启动
  10. mysql 索引使用与优化