手机APP的启动时长是一个很容易被用户感知的性能指标,启动时长过长会让用户极不愿意继续等待。因此启动时长是一项比较靠前的性能指标。APP的启时长分为两种情况,一种是冷启动时间(通常是系统重启,即在启动前没有该App进程的情况),另一种是热启动,即App从被切换到前台(点back退出后再点击图标启动)。执行启动时长的性能测试,我总结了一下几种测试方法,并分析优缺点。
一、adb 命令计算启动时长
测试方法输入adbshell am start -W packagename/MainActivity命令,计算启动时间。如下图:
WaitTime 就是总的耗时,包括前一个应用Activity pause的时间和新应用启动的时间;ThisTime 表示一连串启动Activity 的最后一个 Activity 的启动耗时;TotalTime表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用Activity pause 的耗时。也就是说,一般只要关心 TotalTime 即可,这个时间才是自己应用真正启动的耗时。
总结:这种测试方法简单容易,并且可以准确的计算出系统启动这个Activity的时间。但是缺点是不包括点击icon到系统接收到消息的时间,也就是说这个时间并不能完整的模拟用户操作场景的启动时间。
二、录制启动视频,截取视频时间计算时间
视频录制的方法主要就是2个。1、使用相机对着手机屏幕进行录像,2、使用Adb命令录制视频。
相机录制视频的方法我就不多说了。
adb录制视频方法如下:
(1)输入命令adb shell screenrecord --bugreport /sdcard/lanch.mp4 备注:bugreport 参数会使视频输出一些时间信息和帧信息便于我们分析启动时间。
(2)点击收集图标,app完全启动后,使用ctrl+c结束视频录制。
(3)使用命令adb pull sdcard/lanch.mp4 D:/,导出视频 到D盘
(4)导出视频到电脑后,使用可以按帧播放的视频软件打开(mac上quicktime就可以,win下可以用kmplayer),并按帧播放。这样就可以看出从点击图标到启动所花的时间。
总结:这种测试方法完全就是还原用户场景,这样的时间可能比较接近于实际用户感应的时间。但是测试方法麻烦,且每次测试的数据差距也许会很大。数据分析起来也会比较麻烦。
三、代码埋点,输出日志
在代码中打点,查看输出日志。这种方法需要开发过程中在代码里提前准备好专门的日志。然后通过日志打印时间计算启动时间。
总结:可以准确的输出整个启动需要执行的操作,遇到问题也可以准确的定位到具体的函数,比较有针对性。但是缺点是这个需要开发者支持,数据分析起来也或许会比较麻烦。
以上三种方法是我整理的三种,如果实际测试工作中,可以根据需求来选择合适的方法。