对于app的性能测试,启动时间是个重要指标,启动时间分为两种情况,一种是冷启动时间(通常是系统重启,即在启动前没有该app进程的情况),另一种是热启动,即app从被切换到前台(点back退出后再点击图标启动)。 从Android4.4(API 19)开始,可以从logcat获取activity的启动信息,如下我用应用宝做实验,可以看到如下的输出,从这里我们可以看到应用的这个activity启动用了639ms。
这个log信息会在activity首次被绘制时输出,也是如果activity栈里有这个activity,再启动不会输出该信息,典型的场景是通过recent task列表切换到其他activity再立即切换回来时。 log中的时间包括系统从开始处理启动activity的时间到完成运行layout和draw函数的时间,不包括点击icon到系统接收到消息的时间。显然,这个时间也不包括启动中异步UI绘制的时间。但是我们在测试中关注的其实是用户体验的启动时间,那么上面log中的时间不能满足我们的需求了。 不过还好,既然是用户体验我们可以用更直观的方式,使用screenrecord进行屏幕录制然后分析视频。使用如下命令录制视频。
--bugreport参数会使视频输出一些时间信息和帧信息便于我们分析启动时间。 activity启动后,使用ctrl+c结束视频录制,使用
导出视频到电脑,使用可以按帧播放的视频软件打开(mac上quicktime可以,win下可以用kmplayer),并按帧播放。 按帧播放视频,视频左上角会显示每一帧的时间(精确到ms)和帧数。在视频中会看到icon会变暗然后高亮,高亮时是系统开始处理本次icon点击事件了。可以把这里作为点击时间,然后根据体验要求,看到app启动页完全绘制完作为终止时间,这个时间减去点击时间是app的启动时间。 在进行app启动时间测试时,系统中运行的其他app会对启动时间有干扰,如果需要进行版本对比及竞品对比,好要尽量保持环境一致,并反复执行多次取平均值。后,不要忘了分别测试冷启动和热启动哦~