應(yīng)用的啟動速度直接關(guān)系到用戶體驗(yàn),如果一個(gè)應(yīng)用啟動緩慢導(dǎo)致的黑屏,白屏等問題,直接會導(dǎo)致用戶的流失。所以首次啟動的速度非常重要,畢竟影響用戶對 App 的第一印象。
如何測試一個(gè)Android App的啟動時(shí)間呢?
首先我們要理解三個(gè)定義:
冷啟動:當(dāng)啟動應(yīng)用時(shí),后臺沒有該應(yīng)用的進(jìn)程,這時(shí)系統(tǒng)會重新創(chuàng)建一個(gè)新的進(jìn)程分配給該應(yīng)用,這個(gè)啟動方式就是冷啟動。通俗的講,用戶打開關(guān)閉著的應(yīng)用的過程。
熱啟動:當(dāng)啟動應(yīng)用時(shí),后臺已有該應(yīng)用的進(jìn)程(例:按back鍵、home鍵,應(yīng)用雖然會退出,但是該應(yīng)用的進(jìn)程是依然會保留在后臺,可進(jìn)入任務(wù)列表查看),所以在已有進(jìn)程的情況下,這種啟動會從已有的進(jìn)程中來啟動應(yīng)用,這個(gè)方式叫熱啟動。通俗的講,就是用戶把已經(jīng)打開的應(yīng)用,放置到當(dāng)前屏幕上。
首次啟動:首次啟動嚴(yán)格來說也是冷啟動,之所以把首次啟動單獨(dú)列出來,一般來說,首次啟動時(shí)間會比非首次啟動要久,首次啟動會做一些系統(tǒng)初始化工作,如緩存目錄的生產(chǎn),數(shù)據(jù)庫的建立,SharedPreference的初始化,如果存在多 dex 和插件的情況下,首次啟動會有一些特殊需要處理的邏輯,而且對啟動速度有很大的影響。通俗的講,就是安裝后的第一次打開應(yīng)用的過程。
好了,理解了一些概念,現(xiàn)在來探討如何測試了。
一般我們用這個(gè)命令來測試啟動時(shí)間:
adb shell am start -W [PackageName]/[PackageName.MainActivity]
首先,要知道app的啟動activity.如下:

然后,用這個(gè)命令來獲取啟動時(shí)間:

ThisTime、TotalTime 和 WaitTime。WaitTime 是 startActivityAndWait 這個(gè)方法的調(diào)用耗時(shí),ThisTime 是指調(diào)用過程中最后一個(gè) Activity 啟動時(shí)間到這個(gè) Activity 的 startActivityAndWait 調(diào)用結(jié)束。TotalTime 是指調(diào)用過程中第一個(gè) Activity 的啟動時(shí)間到最后一個(gè) Activity 的 startActivityAndWait 結(jié)束。如果過程中只有一個(gè) Activity ,則 TotalTime 等于 ThisTime。
如果只關(guān)心某個(gè)應(yīng)用自身啟動耗時(shí),參考TotalTime;如果關(guān)心系統(tǒng)啟動應(yīng)用耗時(shí),參考WaitTime;如果關(guān)心應(yīng)用有界面Activity啟動耗時(shí),參考ThisTime。
然后,就可以自由發(fā)揮了,寫段代碼,重復(fù)各種啟動幾次,用圖表展現(xiàn)出來。
但是獲得這些數(shù)據(jù)有啥用呢?
根據(jù)多數(shù)用戶體驗(yàn),性能一般的機(jī)子,
- 冷啟動時(shí)間控制在2,3,5秒(1秒正常,3秒湊合,5秒快到用戶忍受極限了)
- 熱啟動時(shí)間控制在1,2,3秒(1秒正常,2秒湊合,3秒快到用戶忍受極限了)
- 首次啟動時(shí)間控制在2,5,8秒(2秒正常,5秒湊合,8秒快到用戶忍受極限了)
如果超過這個(gè),就要考慮開bug,讓開發(fā)優(yōu)化了。
更多精彩,請關(guān)注微信公眾號:python愛好部落