1. 程式人生 > 其它 >Android App啟動時間測量

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 -> create activity。 這個過程應用最早被呼叫的函式是Application.attachApplication()。

  應用啟動時間從Application.attachApplication()函式中開始計時,一直到首頁Activity第一屏UI展示結束,是應用啟動的耗時。

  在網上大部分資源都是到首頁Activity.onWindowFocusChanged(hasFocus: Boolean)函式,這個函式是Activity的首幀渲染時間,並不是首頁第一屏展示時間。