热启动
- “热启动” 是指您的应用已经启动且正在后台运行 (但被暂停了) 时的启动。
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
冷启动
- “冷启动” 是指您的应用在安装后的第一次启动、重启,或者不在后台时的启动。
- 一致性: 冷启动可以确保您的应用每次启动时都经历相同的操作。应用被热启动时,我们没法明确知道哪些步骤被跳过,而哪些步骤被执行,因而也无从得知您到底在对什么进行计时 (也无法保证重复测试时所测试的内容是否一致);
- 最坏情况: 按照定义,冷启动是最坏的情况——这是您的用户经历启动过程时间最长的场景。您需要专注于最坏情况的统计数据,而不是状况最好的热启动。如果您忽略最坏情况,许多重大问题将无法被解决。
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后可计算平均冷启动时间