首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android性能测试-启动时间

Android应用的性能测试通常包括启动时间、内存、CPU、耗电量、流量和流畅度等。

在App的性能测试中,启动时间是个非常重要的指标。

先来简单说说App的启动方式,主要分两种情况:

1、冷启动:通常是系统重启。即在启动应用时,后台没有该应用的进程,系统会重新创建一个新的进程分配给该应用,也就是先实例化Application。

2、热启动:在启动应用时,后台已经有该应用的进程(比如,按home键,或back键退出,进程是保留在后台的),这种启动会直接从进程中启动,不需要重新创建Application。

测试App时,一般关注的是冷启动时间。

以下介绍三种测试启动时间的方法,供大家参考,可以有针对性的使用。

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

这种方法有一定的缺点:

1、效率低下。这种简单的操作需要耗费大量的人力和时间进行测试、数据收集以及分析。

2、数据不准确。由于一轮测试需要耗费大量时间,所以测试的次数很有限,样本数量也相对较少,仅一次异常数据就有可能影响最终的结论。

既然传统的测试方法过于简单且低效。我们能否使用自动化来实现呢?答案是肯定的。

读取系统日志获取启动耗时是一种更为高效准确的方法。应用第一次启动也就是我们常说的冷启动时,应用程序的进程是没有创建的。点击应用 icon 后,首先要创建进程,然后启动 MainActivity。这时候adb shell am start -w packagename/MainActivity返回的结果,就是标准的应用程序的启动时间。

这里有三个时间参数值得被关注:

1、TotalTime:待测应用所有Activity的启动耗时,不包括当前应用Activity 的onPause() 耗时。开发者一般只要关心TotalTime即可,这个时间才是一个应用真正启动的耗时。

2、WaitTime:系统启动应用耗时,是ActivityManagerService启动App的Activity时的总时间(包括当前Activity的onPause()和自己Activity的启动)。

3、 ThisTime:一系列启动Activity的最后一个Activity的启动耗时。

注:Android 5.0之前的手机没有WaitTime。

可以看出:

首先,该方法得出的时间是系统从开始处理启动Activity的时间到完成运行layout()和draw()方法的时间,并不包括点击icon到系统接收到消息的时间。

其次,该方法只计算一个Activity的整体启动时间,没有分别统计其中每个方法的执行时间,不便于定位问题。

所以,这个时间并不能准确模拟用户操作场景的启动时间。

我们在测试中关注的其实是用户体验的启动时间,那么上面的时间就不能满足需求了。

使用screenrecord命令进行屏幕录制是一种更加直观的测试方式。

1、录制视频的时候声音不会被录下来。

2、支持Android4.4(API level 19)以上版本手机。

3、支持视频格式.mp4。

4、录制过程中,不支持屏幕旋转,否则画面有可能被中断。

5、可通过--time-limit xx参数设置录制时间。如果不设置时间,默认录制时间为180s。

adb shell screenrecord --bugreport

首先,启动带--bugreport选项的screenrecord 命令,然后点击app的图标,等待app界面的显示。

其次,Ctrl c结束命令执行,使用adb pull /sdcard/launch.mp4命令把文件导出到电脑。

录制完成后,使用视频播放器将mp4文件逐帧播放。可以看到,视频的上方有一个frame时间戳。截图上的15:16:14.282表示时:分:秒,f=357表示帧数。

1、播放过程中,看到App的icon高亮时,记录下这一帧的时间,即点击时间。

2、继续播放帧,直到你看到了App启动页绘制完成,记录下这一帧所发生的时间。

3、把这两个时间相减, 得到app从点击到绘制就绪的所有时间。

4、使用同样的方法,对竞品进行测试并计算启动时间。对比优化。

以上方法,单从启动时间看,是无法定位出具体哪个函数耗时多一些,遇到启动时间大于预定的启动时间阀值时,需要一步步的打log,分析查明原因。可见,这种方法仍然有局限性。

代码埋点,然后查看LOG是更为理想的一种测试方法。使用这种方法,可以很清晰的看到每个函数的调用时间。在测试过程中发现问题,也可以定位出具体的函数耗时时间。

不过,埋点的方法我只是了解如何运用,还并未在项目中进行测试。真是遗憾和失误。所以暂时没法做记录了。后期再进行补充。有感兴趣的可以先行Google。

附:

Google官方文档《Launch-Time Performance》对应用启动优化的概述。

https://developer.android.com/topic/performance/vitals/launch-time

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180712G1E36F00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券