Android App启动时间测量

一、测量方式

  1. 使用AM服务启动App的第一个界面并输出应用启动时间。

    通过adb命令执行am命令启动App并出界应用启动时间。

    命令格式:

adb shell am start -W packagename/packagename.首页Activity

  示例:

adb shell am start -W com.example.demoapp/com.example.demoapp.MainActivity2

  结果:

➜  DemoApp adb shell am start -W com.example.demoapp/com.example.demoapp.MainActivity2
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.demoapp/.MainActivity2 }
Status: ok
Activity: com.example.demoapp/.MainActivity2
ThisTime: 967
TotalTime: 967
WaitTime: 1011
Complete

    ThisTime:最后启动的Activity的耗时。

    TotalTime:所有Activity启动耗时。

    WaitTime:是AMS启动Activity耗时。

    由于例子中只启动了一个Activity,所以ThisTime和TotalTime时间一致。

  使用adb shell am命令很方便的输出了应用启动时间及Activity启动耗时,但是,时间并不太精准。

  在实际场景也不会有应用去执行adb shell am命令收集指定应用的启动耗时。

  应用启动耗时统计从App启动到首页第一屏展示过程的时间,而不是单指应用首页Activity启动耗时。

  2. 手动打点

  需要明确应用启动到首页第一屏UI展示为结束的时间点计算为应用启动时间。

  从桌面launch触发应用启动到首页Activity展示,这个过程中哪些是应用中可以控制的,哪些是系统控制的。

  launch App -> AMS -> zygote -> create app process -> attachApplication -> bindApplication -> attachBaseContext -> create activity。 这个过程应用最早被调用的函数是Application.attachBaseContext()。

  应用启动时间从Application.attachBaseContext()函数中开始计时,一直到首页Activity第一屏UI展示结束,是应用启动的耗时。

  在网上大部分资源都是到首页Activity.onWindowFocusChanged(hasFocus: Boolean)函数,这个函数是Activity的首帧渲染时间,并不是首页第一屏展示时间。

posted @ 2021-10-05 21:41  naray  阅读(1244)  评论(0编辑  收藏  举报