前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【 Android 场景化性能测试】启动速度篇

【 Android 场景化性能测试】启动速度篇

原创
作者头像
腾讯移动品质中心TMQ
修改于 2017-11-01 01:40:52
修改于 2017-11-01 01:40:52
2.1K0
举报

作者:jadefu(傅俊彬)

团队:移动品质中心TMQ

一、背景

传统测试启动速度的方法是录屏分帧,即手工录制启动过程,然后通过分帧软件将启动过程的每一帧抽取出来,选取启动帧与结束帧,从而计算出差值作为启动速度。显然,这个方法有如下缺点:

1、效率低下。

这种简单暴力的操作显然需要耗费人力与大量时间进行测试、数据收集以及分析。

2、数据不准确。

由于一轮测试需要耗费大量时间,所以测试的次数有限,样本量较少,一次异常的数据就有可能会影响最终的结论。既然是简单粗暴重复的劳动,我们是不是可以考虑使用自动化来实现呢?答案是肯定的,我们采用了另一个更为高效准确的方法——读取系统日志获取启动耗时。

下面就来分享一下“懒人的智慧”。

二、日志信息

通过ActivityManager这个TAG,我们可以获取一个Activity的启动耗时。

下面是冷启动(清除数据后启动)的Log信息:

下面是热启动(点击返回键后启动)的Log信息:

可以看到冷启动有两条耗时的日志,这是因为首次安装启动存在闪屏,所以冷启动过程划分成了【点击图标-进入闪屏】以及【闪屏结束后点击按钮-进入应用首页】两个阶段。

通过Log可知:

(1)冷启动耗时为:636ms + 993ms = 1629ms;

(2)热启动耗时为:1520ms

这里需要说明一下,在某些情况下会出现以下类型的Log:

其中前者是This Time,后者是Total Time,关于二者的区别可以参考代码:

这里有三个关键变量,它们各自的定义如下:

(1)curTime:该函数调用时的时间点。

(2)launchTime:一连串启动Activity中最后一个Activity的启动时间点。

(3)mInitialStartTime:一连串启动Activity中第一个Activity的启动时间点。

通常情况下,点击图标只会启动一个Activity,此时launchTime与mInitialStartTime指向同一个时间点,即thisTime=totalTime;但有些应用在启动的时候会启动一个无界面的Activity做逻辑处理,然后再启动一个有界面的Activity,此时launchTime指向有界面Activity的启动时间,mInitialStartTime指向无界面Activity的启动时间,thisTime<totalTime。

如图所示:

小结

通过ActivityManager这个TAG可以获取Activity启动耗时。对于单个Activity的启动,我们可直接使用thisTime作为启动耗时;对于多个Activity的启动,我们则使用totalTime作为启动耗时。

三、数据采集

为了实现自动化测试,brookechen编写了一个实现性能自动化测试的框架,通过python和uiautomator驱动用例执行、实现数据收集。关于框架的详细介绍可以参考TMQ系列文章《Android场景化性能测试-方向与框架篇》。

框架大体可分为两个部分:用例执行与数据收集处理,依次执行:

suite_up()、set_up()、test()、tear_down() 、suite_down()。

关于启动速度的用例执行比较简单,在此不赘述,每轮测试包括了冷启动与热启动,主要在test()内执行以下步骤:

清除数据-启动应用-滑动闪屏进入首页-返回桌面-再次启动应用。

而数据的收集,会在set_up()方法内开启一个线程收集数据,通过adb命令:

logcat -v time ActivityManager:I *:S

我们可以只收集ActivityManager这个TAG的日志,但是这个日志除了我们需要获取的耗时信息,还有其他一些启动相关的日志,在这里我们还需对日志做进一步的筛选过滤,具体规则如下:

(1)不含Displayed的日志行丢弃;

(2)不含指定包名的日志行丢弃;

(3)不含指定Activity名的日志行丢弃。

获取了有用的日志行之后,我们还需要对日志行提取出启动耗时的数据,即从09-26 19:57:03.332: I/ActivityManager(932): Displayed com.tencent.wifimanager/com.tencent.server.fore.QuickLoadActivity: +944ms提取出 944ms,这里我们可以通过正则表达式来获取,具体代码如下:

四、数据分析

有了自动化脚本,我们就可以对历史版本的启动速度做一个对比,并将测试数据以折线图的形式直观地展示出来,从而更直接地反映不同版本启动速度的差异。

得出测试数据后,若测试结论不理想,我们可以通过Android Device Monitor的trace viewer来观察不同线程及不同方法的执行耗时。

对于上半部分的图表,我们主要关注不同线程占用的耗时,颜色横条越长越多,表示该线程占用耗时越大。

对于下半部分的表格,我们主要关注对应线程下不同方法的占用耗时,主要关注以下三个字段:

(1)Cpu Time/Call:该方法平均占用 CPU 的时间;

(2)Real Time/Call:该方法平均执行时间,包括切换、阻塞的时间;

(3)Calls+RecurCalls/Total:该方法调用、递归次数。

以上三个字段数值越大,表示方法占用耗时越大。

为了方便开发定位,我们还可以将生成的traceview文件提供给开发,具体的目录可以将鼠标放到traceview名称上,对应的目录就会显示出来。

至此,启动速度数据的收集以及分析已经介绍完毕,水平有限,无法一一详尽,阅读过程中有任何的疑问或修正都欢迎随时提出,一同讨论。

搜索微信公众号:腾讯移动品质中心TMQ,获取更多测试干货!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深入研究Android启动速度优化(上)- 看完这些启动优化已经完成80%了
启动是指用户从点击 icon 到看到页面首帧的整个过程,启动优化的目标就是减少这一过程的耗时。启动性能是 APP 使用体验的门面,启动过程耗时较长很可能导致用户使用 APP 的兴趣骤减。提高启动速度是每一个 APP 在体验优化方向上必须要做的关键技术突破。
Rouse
2024/05/09
2.1K0
深入研究Android启动速度优化(上)- 看完这些启动优化已经完成80%了
Android性能优化(一)之启动加速35%
随着项目版本的迭代,App的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关,从本篇文章开始,我将开启一个Android应用性能优化的专题,从理论到实战,从入门到深挖,手把手将性能优化实践到项目中,欢迎持续关注!
用户2898788
2018/08/21
2K0
Android性能优化(一)之启动加速35%
Android 性能分析学习(启动速度优化)
启动速度是用户体验app的第一感官,所以如果APP卡顿的话,给用户的体验会非常的糟糕。 本文主要针对这点进行的分析学习以及记录。
艳龙
2021/12/16
9380
Android 性能分析学习(启动速度优化)
APP性能测试—启动耗时
应用启动是整个App工序的第一道流程。对于开发者,一般需要在应用启动过程中进行初始化工作,启动页的UI展示。而对于用户来说,启动速度的快慢则极大地影响了使用体验,并且间接地影响了用户的留存率。
清风穆云
2021/08/09
2.9K0
一触即发——App启动优化最佳实践
一触即发 App启动优化最佳实践 本篇是我的原创,我又回来啦~ 文中的很多图都是Google性能优化指南第六季中的一些截图 Google给出的优化指南来镇楼 https://developer.an
用户1907613
2018/07/20
1.4K0
Android App启动优化深度实践 (由2.4s优化到1s以内)
我们的APP新版本,从2017年4月份提交第一行代码开始,就现在已经有两年半的时间,在这两年多的时间里,APP的内容内容不断丰富,例如先后加入了求职招聘、问答、个人中心、二手机,小视频等等模块。同时对于以前的旧功能也在不断地完善,例如,丰富了发帖的内容、小视频详情页像抖音一样方便快捷、标签的聚合更加精准的吸引用户。
Demo_Yang
2019/08/12
2.1K1
Android性能优化系列之App启动优化
应用的启动速度缓慢是我们在开发过程中经常会遇到的问题,比如启动缓慢导致的黑屏,白屏问题,本篇博客就将介绍App启动优化的相关知识。
老马的编程之旅
2022/06/22
7480
Android性能优化系列之App启动优化
APP,Activity的启动速度优化
以上打印出了所谓的thisTime和totalTime,thisTime是指当前Activity的启动时间,正常情况下,如果从桌面启动一个Activity,那么thisTime==totalTime,但是通常app会有一个不加载布局文件的闪屏页面,然后再跳转到相应的Activity,这时候thisTime仅仅是代表最后一个Activity的启动时间,而totalTime还包括而totalTime是指APP进程启动时长,闪屏页面的启动时长以及闪屏页面的消失,新Activity的启动时长之和,所以关注APP的启动时间,我们通常关注的是totalTime
大大大大大先生
2018/09/04
1.6K0
APP,Activity的启动速度优化
Android App性能优化全方面解析
为了让各位读者过好本次国庆节和中秋节,假日期间我将会推送一些非技术类文章,让你的假日不在孤单迷茫!
开发者技术前线
2020/11/23
7200
Android App性能优化全方面解析
APP常见性能测试点之响应时间
  软件的响应时间和响应速度直接影响到用户的体验度,如果一个软件,迟迟加载不出来,会直接影响到软件的日活、留存。因此对于一个软件,对响应速度测试是必不可少的。
顾翔
2021/07/22
3.1K0
Android性能优化笔记(一)——启动优化
从上面的总结可以看出,在应用的启动过程中,冷启动是最慢最耗时的,系统以及应用本身都有大量的工作需要处理,所以,冷启动对于应用的启动速度是最具挑战以及最有必要进行优化的。
分你一些日落
2021/12/13
1.1K0
Android性能优化,一对一直播源码启动速度优化之耗时检测处理
一对一直播源码的启动速度缓慢这是很多开发者都遇到的一个问题,比如启动缓慢导致的黑屏,白屏问题,大部分的答案都是做一个透明的主题,或者是做一个Splash界面,但是这并没有从根本上解决这个问题。那么如何从根本上解决这个问题或者做到一定程度的缓解?
云豹科技程序员
2021/06/24
5190
【App测试】怎么测试启动时间?
何小伟
2016/12/23
6.4K1
【App测试】怎么测试启动时间?
你想要的Android性能优化系列:启动优化 !
手机桌面点击一个应用,用户希望应用能 及时响应、快速加载。启动时间过长的应用可能会令用户失望。这种糟糕的体验可能会导致用户在 Play 商店针对您的应用给出很低的评分,甚至完全弃用您的应用。
胡飞洋
2020/07/23
1.7K0
Android面试题之App的启动流程和启动速度优化
①点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;
AntDream
2024/06/24
1650
Android面试题之App的启动流程和启动速度优化
Android性能优化(一)
一个应用App的启动速度能够影响用户的首次体验,启动速度较慢(感官上)的应用可能导致用户再次开启App的意图下降,或者卸载放弃该应用程序。
xiangzhihong
2021/01/22
2.8K0
【学员干货】App常见性能测试点
(app除了这些性能测试,还有:手机版本号兼容性,屏幕分辨率兼容性,稳定性测试,安全测试等,后续会持续更新… 流量测试同这些一起更新,这里就不在说明了 )
新梦想IT职业教育
2019/10/22
3.4K0
【学员干货】App常见性能测试点
你的 APP 为何启动那么慢?
可见冷启动的必要条件是该APP进程不存在,这就意味着系统需要创建进程,APP需要初始化。在这三种启动方式中,冷启动耗时最长,对于冷启动的优化也是最具挑战的。因此本文重点谈论的是对冷启动相关的优化。
刘盼
2019/05/08
2K0
你的 APP 为何启动那么慢?
深入探讨Android启动优化策略
在当今激烈竞争的移动应用市场,应用的启动速度直接影响着用户的第一印象和满意度。作为主流的移动操作系统之一,Android的启动优化是开发者必须关注的关键领域。本文将详细介绍一些强大有效的Android启动优化策略,帮助你优化应用的启动过程,为用户创造更出色的体验。
Rouse
2023/08/31
3520
深入探讨Android启动优化策略
【Android 性能优化】应用启动优化 ( 启动白屏问题 | 应用启动时间测量 | 冷启动 | 热启动 | 应用启动时间计算源码分析 )
1 . 问题描述 : Android 应用启动时 , 尤其是大型复杂的应用 , 经常出现几秒钟的白屏或黑屏 , 黑屏或白屏取决于主界面 Activity 的主题风格 ;
韩曙亮
2023/03/27
5.4K0
【Android 性能优化】应用启动优化 ( 启动白屏问题 | 应用启动时间测量 | 冷启动 | 热启动 | 应用启动时间计算源码分析 )
推荐阅读
相关推荐
深入研究Android启动速度优化(上)- 看完这些启动优化已经完成80%了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档