Android應(yīng)用的啟動時(shí)間

應(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.如下:


adb2.jpg

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


adb.jpg

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愛好部落

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,950評論 25 709
  • 1.什么是Activity?問的不太多,說點(diǎn)有深度的 四大組件之一,一般的,一個(gè)用戶交互界面對應(yīng)一個(gè)activit...
    JoonyLee閱讀 5,856評論 2 51
  • Android Studio JNI流程首先在java代碼聲明本地方法 用到native關(guān)鍵字 本地方法不用去實(shí)現(xiàn)...
    MigrationUK閱讀 12,088評論 7 123
  • 脖子很酸。 剛說完這話我就后悔了。我剛從酒吧下班,走過兩點(diǎn)的街道,買了一大盒巧克力,躺在出租屋的床上,扭了扭脖子。...
    嚴(yán)好甜閱讀 471評論 0 2
  • 文|李曉木 常常有人問我,女人生過孩子,是不是生活就以孩子為中心,聊天的話題永遠(yuǎn)是孩子會笑了,孩子會爬了,孩子會叫...
    李曉木閱讀 1,788評論 15 43

友情鏈接更多精彩內(nèi)容