ADB计算启动时间

通过ADB命令可以统计应用的启动时间,指令如下所示。

  1. ~ adb shell am start -W com.xys.preferencetest/.MainActivity
  2. Starting:
  3. Intent {
  4. act=android.intent.action.MAIN
  5. cat=[android.intent.category.LAUNCHER] cmp=com.xys.preferencetest/.MainActivity }
  6. Status: ok
  7. Activity: com.xys.preferencetest/.MainActivity
  8. ThisTime: 1047
  9. TotalTime: 1047
  10. WaitTime: 1059
  11. Complete

该指令一共给出了三个时间。

  • ThisTime:最后一个启动的Activity的启动耗时。
  • TotalTime:自己的所有Activity的启动耗时。
  • WaitTime:ActivityManagerService启动App的Activity时的总时间(包括当前Activity的onPause()和自己Activity的启动)。

这三个时间不是很好理解,我们可以把整个过程分解,如下所示。

1.上一个Activity的onPause()——2.系统调用AMS耗时——3.第一个Activity(也许是闪屏页)启动耗时——4.第一个Activity的onPause()耗时——5.第二个Activity启动耗时。

ThisTime表示5(最后一个Activity的启动耗时)。TotalTime表示3、4、5总共的耗时(如果启动时只有一个Activity,那么ThisTime与TotalTime应该是一样的)。WaitTime则表示所有的操作耗时,即1、2、3、4、5所有的耗时。

ADB计算启动时间 - 图1每次给出的时间可能并不一样,而且应用从首次安装启动到后面每次正常启动,时间都会不同,区别在于系统是否要分配进程空间。

一般来说,可以使用脚本多次重复应用“启动—Kill—启动”过程并取其平均时间。