移动性能测试 [讨论&伸手贴] 获取 APP 启动时间

碎念的心心 · September 08, 2015 · Last by 恒温 replied at September 10, 2015 · 1690 hits

前提:
①暂定 app的首页activity的Displayed 时间 ≈ APP启动时间。
②暂时忽略首次启动和非首次启动时间的区别。
③以下数据基本都在相同的环境下产生。
④以下数据都是在genymotion模拟器上产生。

可以通过这两个命令可以获取activity的展现时间。
a:【adb shell am start -W -n 包名/app的首页activity】
b:【adb logcat -c && adb logcat -s ActivityManager 】或【adb logcat -c && adb logcat -v time -s ActivityManager】

通过a命令得到的 TotalTime < 通过b命令计算后得到的 Time

b命令的计算方式:
下面log中最后一行time - 第一行log中的time = 1892,而命令a获得的TotalTime < 1000

09-08 05:39:48.750 I/ActivityManager(  515): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=包名/启动页activity} from pid 694
09-08 05:39:49.518 I/ActivityManager( 515): Displayed 包名/启动页activity: +525ms
09-08 05:39:50.138 I/ActivityManager( 515): START u0 {cmp=包名/首页activity} from pid 4841
09-08 05:39:50.642 I/ActivityManager( 515): Displayed 包名/首页activity: +502ms

但素:
命令a获得的TotalTime 会 大于 命令b中首页activity的Displayed 时间,这又是为啥呢?不懂,求伸手

目前接触到的一些app应用在启动的时候(人肉点击app图标启动)一般都会有多个activity,是不是意味app启动时间通过log计算出来的更接近实际一些?

共收到 4 条回复 时间 点赞
adb shell pm clear xxx # 打开注释,可以计算第一次打开的情况。
adb shell input keyevent 3
adb shell am start com.xxx.xxx.LauncherActivity
start_time=`adb shell cat /proc/timer_list | awk 'NR==3{printf("%.0f",$3/1000000)}'`
while true
do
# activity=`adb shell dumpsys SurfaceFlinger | grep "| xxxx"` # 登录界面

if [ $? = "0" ]; then
echo $activity
break
fi

done
end_time=`adb shell cat /proc/timer_list | awk 'NR==3{printf("%.0f",$3/1000000)}'`
# echo $start_time, $end_time, $((end_time-start_time)) >> test.csv
echo $((end_time-start_time)) >> test.csv
sleep 1
adb shell am force-stop xxx

首先,不是获取App启动时间。你的文章内基本上就是Native的启动时间。而现在的webview以及hybrid以及semi-hybrid都不适用,所以要问问题问清楚。

其次,你要是要接近实际,那么就不能走任何软件给出来的时间,所谓实际就是真正的人感受到的时间,那么就是高速或者慢速摄像机。所以就不可能用任何所谓的log打出来。

然后继续来说,TotalTime,可见

final long thisTime = curTime - displayStartTime;
final long totalTime = stack.mLaunchStartTime != 0
? (curTime - stack.mLaunchStartTime) : thisTime;

然后说xia本地得,你启动的只不过是一个Activity,也谈不上App。所以Activity本身就有启动时间,而这个启动分成三个部分,每个View都是。类似于

so,要专业。。。。

#1楼 @lihuazhang 帮你优化一下,启动的步骤用adb shell monkey -p com.my.pkg -c android.intent.category.LAUNCHER 1 省去launchActivty强相关

#3楼 @vigossjjj 赞! 另外我这个对webview 不太实用。

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up