测试APP启动耗时

本文详细介绍了应用启动的两种模式——热启动和冷启动,重点讨论了它们的区别、性能影响以及测试方法。热启动发生在应用已在后台暂停时启动,而冷启动则是应用首次启动或不在后台时的情况。冷启动由于涉及更多步骤,通常耗时更长,因此是优化关注的重点。文章提供了一个shell脚本示例,用于多次测量和计算应用的平均冷启动时间,以确保性能测试的可靠性。
摘要由CSDN通过智能技术生成

热启动

  • “热启动” 是指您的应用已经启动且正在后台运行 (但被暂停了) 时的启动。
 C:\Users\xxx>adb shell am start-activity -W -n com.xdja.safekeyservice/com.xdja.scservice.presenter.activity.SplashScreenPresener
 Starting: Intent { cmp=com.xdja.safekeyservice/com.xdja.scservice.presenter.activity.SplashScreenPresener }
 Warning: Activity not started, its current task has been brought to the front
 Status: ok
 LaunchState: HOT
 Activity: com.xdja.safekeyservice/com.xdja.scservice.presenter.activity.MainFragmentPresenter
 TotalTime: 190
 WaitTime: 60
 Complete

冷启动

  • “冷启动” 是指您的应用在安装后的第一次启动、重启,或者不在后台时的启动。
  1. 一致性: 冷启动可以确保您的应用每次启动时都经历相同的操作。应用被热启动时,我们没法明确知道哪些步骤被跳过,而哪些步骤被执行,因而也无从得知您到底在对什么进行计时 (也无法保证重复测试时所测试的内容是否一致);
  2. 最坏情况: 按照定义,冷启动是最坏的情况——这是您的用户经历启动过程时间最长的场景。您需要专注于最坏情况的统计数据,而不是状况最好的热启动。如果您忽略最坏情况,许多重大问题将无法被解决。
 C:\Users\xxx>adb shell am start-activity -W -n com.xdja.safekeyservice/com.xdja.scservice.presenter.activity.SplashScreenPresener
 Starting: Intent { cmp=com.xdja.safekeyservice/com.xdja.scservice.presenter.activity.SplashScreenPresener }
 Status: ok
 LaunchState: COLD
 Activity: com.xdja.safekeyservice/com.xdja.scservice.presenter.activity.SplashScreenPresener
 TotalTime: 3136
 WaitTime: 3141
 Complete

耗时说明

  • WaitTime 就是总的耗时,包括前一个应用 Activity pause 的时间和新应用启动的时间;
  • ThisTime 表示一连串启动 Activity 的最后一个 Activity 的启动耗时;
  • TotalTime 表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用 Activity pause 的耗时。也就是说,开发者一般只要关心 TotalTime 即可,这个时间才是自己应用真正启动的耗时

shell脚本控制

  • 性能测试总是应当多次去运行测试用例,以排除结果中的可变因素。进行的运行次数越多,平均结果就越可靠。
  • 确保每次冷启动应用(打开应用前先kill应用进程)
  • 设备CPU锁频(用户真实场景可能不会主动操作锁频,可忽略此项)
  • Windows机器使用Git Bash命令行启动./startAPP.sh
 #!/bin/bash
 #Author:wch
 #Desc:测试应用启动性能
 #Time:2021-04-20
 
 echo "=========================start test==========================="
 touch totalTime.csv
 n=10
 
 for i in `seq 1 $n`
 do
    adb shell am force-stop com.xdja.safekeyservice
    sleep 2
    totalTime=`adb shell "am start-activity -W -n com.xdja.safekeyservice/com.xdja.scservice.presenter.activity.SplashScreenPresener|grep "TotalTime" | cut -d ' ' -f 2"`
    echo $totalTime && echo $totalTime >> totalTime.csv
    sumTotalTime=$(($sumTotalTime+$totalTime))
    sleep 3
 done
 echo 'avgTotalTime'=$(($sumTotalTime/$n))
 echo "=========================end test==========================="
  • 返回TotalTime后可计算平均冷启动时间

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值