app的启动时间测试

本文详细介绍了Android应用启动性能测试中启动时间的测量方法,包括冷启动和热启动的区别,通过logcat获取活动启动信息及使用screenrecord工具进行屏幕录制分析启动时间的步骤。此外,还提供了通过按帧播放视频来精确测量用户体验启动时间的方法。

对于app的性能测试,启动时间是个重要指标,启动时间分为两种情况,一种是冷启动时间(通常是系统重启,即在启动前没有该app进程的情况),另一种是热启动,即app从被切换到前台(点back退出后再点击图标启动)。

12-13 00:10:41.331 855-957/? I/ActivityManager: [AppLaunch] Displayed Displayed com.tencent.android.qqdownloader/com.tencent.assistantv2.activity.MainActivity: +639ms (total +751ms)

12-13 00:10:41.331 855-957/? D/ActivityManager: AP_PROF:AppLaunch_LaunchTime:com.tencent.android.qqdownloader/com.tencent.assistantv2.activity.MainActivity:639:50307447

Android4.4API 19)开始,可以从logcat获取activity的启动信息,我用应用宝做实验,可以看到如下的输出,从这里我们可以看到应用的这个activity启动用了639ms

这个log信息会在activity首次被绘制时输出,也就是如果activity栈里有这个activity,再启动不会输出该信息,典型的场景是通过recent task列表切换到其他activity再立即切换回来时。

log中的时间包括系统从开始处理启动activity的时间到完成运行layoutdraw函数的时间,不包括点击icon到系统接收到消息的时间。显然,这个时间也不包括启动中异步UI绘制的时间。但是我们在测试中关注的其实是用户体验的启动时间,那么上面log中的时间就不能满足我们的需求了。

不过还好,既然是用户体验我们可以用更直观的方式,使用screenrecord进行屏幕录制然后分析视频。使用如下命令录制视频。

adb shell screenrecord --bugreport /sdcard/launch.mp4

--bugreport参数会使视频输出一些时间信息和帧信息便于我们分析启动时间。

activity启动后,使用ctrl+c结束视频录制,使用

adb shell pull /sdcard/launch.mp4 /Users/xxx/Downloads/launch.mp4

导出视频到电脑,使用可以按帧播放的视频软件打开(macquicktime就可以,win下可以用kmplayer),并按帧播放。

按帧播放视频,视频左上角会显示每一帧的时间(精确到ms)和帧数。在视频中会看到icon会变暗然后高亮,高亮时就是系统开始处理本次icon点击事件了。可以把这里作为点击时间,然后根据体验要求,看到app启动页完全绘制完作为终止时间,这个时间减去点击时间就是app的启动时间。

虽然给定引用中未明确提及APP启动具体测试方法,但可结合相关信息推测。热启动是指APP已经在后台运行,用户再次点击APP图标,使其从后台切换到前台的过程[^2]。 可使用自动化脚本进行测试,类似冷启动测试中计算启动时间的方式。例如,利用图片对比的方法来估算热启动耗时。代码示例如下: ```python import dhash from PIL import Image # 计算图片hash值 def calculate_hash(image_path): image = Image.open(fp=image_path) return dhash.dhash_int(image, size=8) # 计算两张图片差异 def compare_images(hash1, hash2): return dhash.get_num_bits_different(hash1, hash2) # 获取图片列表 def get_file_names(img_path): # 这里需要实现获取指定路径下图片文件名列表的逻辑 pass # 获取图片差异,估算耗时 def get_img_diff(img_path): img_list = get_file_names(img_path) _img = -1 img1 = '' img2 = '' for img in img_list: img_hash = calculate_hash(img_path + img + '.jpeg') val = 0 if _img != -1: val = compare_images(img_hash, _img) if img1 == '' and val > 14: # 记录变化首帧 img1 = img print(img, img_path+img+'.jpeg', '-', 'compare_last_img:%d'%val) if img1 != '' and val > 10: # 最后结束帧 img2 = img print(img, img_path+img+'.jpeg', '-', 'compare_last_img:%d'%val) _img = img_hash if img1 and img2: print(img_path+img1+'.jpeg', '->', img_path+img2+'.jpeg') print('耗时估算:%d 毫秒' % ((int(img2)-int(img1))*1000/60)) ``` 在测试启动时,先将APP置于后台,然后触发热启动操作,同时开始按固定间隔截图,将这些截图保存到指定路径,再使用上述脚本计算热启动的耗时。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值