對于app的性能測試缝左,啟動時間是個重要指標玻侥,啟動時間分為兩種情況,一種是冷啟動時間(通常是系統(tǒng)重啟,即在啟動前沒有該app進程的情況)浦徊,另一種是熱啟動,即app從被切換到前臺(點back退出后再點擊圖標啟動)翠订。
從Android4.4(API 19)開始硼一,可以從logcat獲取activity的啟動信息,如下我用應用寶做實驗,可以看到如下的輸出鞍匾,從這里我們可以看到應用的這個activity啟動用了639ms交洗。
12-13 00:10:41.331 855-957/? I/ActivityManager: [AppLaunch] Displayed Displayed com.tencent.android.qqdownloader/com.tencent.assistantv2.activity.MainActivity: +639ms (total +751ms)
12-13 00:10:41.331 855-957/? D/ActivityManager: AP_PROF:AppLaunch_LaunchTime:com.tencent.android.qqdownloader/com.tencent.assistantv2.activity.MainActivity:639:50307447
這個log信息會在activity首次被繪制時輸出,也就是如果activity棧里有這個activity橡淑,再啟動不會輸出該信息构拳,典型的場景是通過recent task列表切換到其他activity再立即切換回來時。
log中的時間包括系統(tǒng)從開始處理啟動activity的時間到完成運行l(wèi)ayout和draw函數(shù)的時間梳码,不包括點擊icon到系統(tǒng)接收到消息的時間隐圾。顯然,這個時間也不包括啟動中異步UI繪制的時間掰茶。但是我們在測試中關注的其實是用戶體驗的啟動時間暇藏,那么上面log中的時間就不能滿足我們的需求了。
不過還好濒蒋,既然是用戶體驗我們可以用更直觀的方式盐碱,使用screenrecord進行屏幕錄制然后分析視頻。使用如下命令錄制視頻沪伙。
adb shell screenrecord --bugreport /sdcard/launch.mp4
--bugreport參數(shù)會使視頻輸出一些時間信息和幀信息便于我們分析啟動時間瓮顽。
activity啟動后,使用ctrl+c結(jié)束視頻錄制围橡,使用
adb shell pull /sdcard/launch.mp4 /Users/xxx/Downloads/launch.mp4
導出視頻到電腦暖混,使用可以按幀播放的視頻軟件打開(mac上quicktime就可以,win下可以用kmplayer)翁授,并按幀播放拣播。
按幀播放視頻,視頻左上角會顯示每一幀的時間(精確到ms)和幀數(shù)收擦。在視頻中會看到icon會變暗然后高亮贮配,高亮時就是系統(tǒng)開始處理本次icon點擊事件了∪福可以把這里作為點擊時間泪勒,然后根據(jù)體驗要求,看到app啟動頁完全繪制完作為終止時間宴猾,這個時間減去點擊時間就是app的啟動時間圆存。
在進行app啟動時間測試時,系統(tǒng)中運行的其他app會對啟動時間有干擾仇哆,如果需要進行版本對比及競品對比辽剧,最好要盡量保持環(huán)境一致,并反復執(zhí)行多次取平均值税产。最后怕轿,不要忘了分別測試冷啟動和熱啟動哦~
本文翻譯偷崩、整理自http://graphics-geek.blogspot.com/2015/10/measuring-activity-startup-time.html?m=1