本文章轉(zhuǎn)載于搜狗測試
對于app的性能測試敷扫,啟動時間是個重要指標(biāo)晴楔,啟動時間分為兩種情況,一種是冷啟動時間(通常是系統(tǒng)重啟撩满,即在啟動前沒有該app進(jìn)程的情況)蜒程,另一種是熱啟動,即app從被切換到前臺(點(diǎn)back退出后再點(diǎn)擊圖標(biāo)啟動)鹦牛。
從Android4.4(API 19)開始搞糕,可以從logcat獲取activity的啟動信息,如下我用應(yīng)用寶做實(shí)驗(yàn)曼追,可以看到如下的輸出窍仰,從這里我們可以看到應(yīng)用的這個activity啟動用了639ms。
12-1300:10:41.331855-957/? I/ActivityManager: [AppLaunch] Displayed Displayed com.tencent.android.qqdownloader/com.tencent.assistantv2.activity.MainActivity: +639ms (total +751ms)
12-1300:10:41.331855-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的時間到完成運(yùn)行l(wèi)ayout和draw函數(shù)的時間碟狞,不包括點(diǎn)擊icon到系統(tǒng)接收到消息的時間。顯然婚陪,這個時間也不包括啟動中異步UI繪制的時間族沃。但是我們在測試中關(guān)注的其實(shí)是用戶體驗(yàn)的啟動時間,那么上面log中的時間就不能滿足我們的需求了泌参。
不過還好脆淹,既然是用戶體驗(yàn)我們可以用更直觀的方式,使用screenrecord進(jìn)行屏幕錄制然后分析視頻沽一。使用如下命令錄制視頻盖溺。
adb shell screenrecord --bugreport /sdcard/launch.mp4
--bugreport參數(shù)會使視頻輸出一些時間信息和幀信息便于我們分析啟動時間。
activity啟動后铣缠,使用ctrl+c結(jié)束視頻錄制烘嘱,使用
adb shell pull /sdcard/launch.mp4 /Users/xxx/Downloads/launch.mp4
導(dǎo)出視頻到電腦,使用可以按幀播放的視頻軟件打開(mac上quicktime就可以蝗蛙,win下可以用kmplayer)蝇庭,并按幀播放。
按幀播放視頻捡硅,視頻左上角會顯示每一幀的時間(精確到ms)和幀數(shù)遗契。在視頻中會看到icon會變暗然后高亮,高亮?xí)r就是系統(tǒng)開始處理本次icon點(diǎn)擊事件了病曾‰狗洌可以把這里作為點(diǎn)擊時間,然后根據(jù)體驗(yàn)要求泰涂,看到app啟動頁完全繪制完作為終止時間鲫竞,這個時間減去點(diǎn)擊時間就是app的啟動時間。
在進(jìn)行app啟動時間測試時逼蒙,系統(tǒng)中運(yùn)行的其他app會對啟動時間有干擾从绘,如果需要進(jìn)行版本對比及競品對比,最好要盡量保持環(huán)境一致是牢,并反復(fù)執(zhí)行多次取平均值僵井。最后,不要忘了分別測試?yán)鋯雍蜔釂优秪