啟動(dòng)時(shí)間的測(cè)試方法
- adb shell am start -W packagename/activity
- ddms adb logcat監(jiān)控
ddms adb logcat
- 創(chuàng)建過(guò)濾條件如下:
- Fliter Name:Display
- By Log Tag:ActivityManager
Paste_Image.png
- 啟動(dòng)應(yīng)用,查看DDMS打印的Display消息,根據(jù)應(yīng)用名稱記錄啟動(dòng)時(shí)間數(shù)據(jù)。計(jì)算從點(diǎn)擊應(yīng)用到應(yīng)用顯示主頁(yè)的的時(shí)間差。如下圖所示,紅線對(duì)應(yīng)的時(shí)間即為該次啟動(dòng)時(shí)間。(有些應(yīng)用啟動(dòng)會(huì)經(jīng)歷2個(gè)階段,如連接服務(wù)器和進(jìn)入主頁(yè),啟動(dòng)時(shí)間為累加2個(gè)display打印的時(shí)間值)
Log信息樣例如截圖:
Paste_Image.png
應(yīng)用啟動(dòng)場(chǎng)景分析
應(yīng)用第一次啟動(dòng)-冷啟動(dòng)
- 也就是我們常說(shuō)的冷啟動(dòng),這時(shí)候你的應(yīng)用程序的進(jìn)程是沒有創(chuàng)建的. 這也是大部分應(yīng)用的使用場(chǎng)景.用戶在桌面上點(diǎn)擊你應(yīng)用的 icon 之后,首先要?jiǎng)?chuàng)建進(jìn)程,然后才啟動(dòng) MainActivity.
- 這時(shí)候adb shell am start -W packagename/MainActivity 返回的結(jié)果,就是標(biāo)準(zhǔn)的應(yīng)用程序的啟動(dòng)時(shí)間(注意 Android 5.0 之前的手機(jī)是沒有 WaitTime 這個(gè)值的):
adb shell am start -W com.media.painter/com.media.painter.PainterMainActivity
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.media.painter/.PainterMainActivity }
Status: ok
Activity: com.media.painter/.PainterMainActivity
ThisTime: 355
TotalTime: 355
WaitTime: 365
Complete
- 如果只關(guān)心某個(gè)應(yīng)用自身啟動(dòng)耗時(shí),參考TotalTime;
- 如果關(guān)心系統(tǒng)啟動(dòng)應(yīng)用耗時(shí),參考WaitTime;
- 如果關(guān)心應(yīng)用有界面Activity啟動(dòng)耗時(shí),參考ThisTime。
應(yīng)用非第一次啟動(dòng)-熱啟動(dòng)
- 如果是你按Back鍵,并沒有將應(yīng)用進(jìn)程殺掉的話,那么執(zhí)行上述命令就會(huì)快一些,因?yàn)椴挥脛?chuàng)建進(jìn)程了,只需要啟動(dòng)一個(gè)Activity即可。這也就是我們說(shuō)的應(yīng)用熱啟動(dòng)。