推薦語(yǔ):是否開(kāi)機(jī)時(shí)嫌棄你的電腦速度太慢塌鸯?小編將為你講解三種測(cè)試你的啟動(dòng)時(shí)間炕婶,理解啟動(dòng)緩慢問(wèn)題所在姐赡,讓工作更有效率,速度更快柠掂。
啟動(dòng)時(shí)間對(duì)于App的性能測(cè)試项滑,啟動(dòng)時(shí)間是個(gè)重要指標(biāo),啟動(dòng)時(shí)間分為兩種情況涯贞,一種是冷啟動(dòng)時(shí)間(通常是系統(tǒng)重啟枪狂,即在啟動(dòng)前沒(méi)有該App進(jìn)程的情況),另一種是熱啟動(dòng)宋渔,即App從被切換到前臺(tái)(點(diǎn)back退出后再點(diǎn)擊圖標(biāo)啟動(dòng))州疾。QA測(cè)試時(shí),一般關(guān)注冷啟動(dòng)的啟動(dòng)時(shí)間皇拣。以下介紹三種測(cè)試啟動(dòng)時(shí)間的方法严蓖,供大家參考,可以有針對(duì)性的使用。
1.1 使用adb命令
1.1.1 測(cè)試方法 輸入adbshell am start -W packagename/MainActivity命令颗胡,計(jì)算啟動(dòng)時(shí)間毫深。如下圖:
圖1應(yīng)用第一次啟動(dòng)也就是我們常說(shuō)的冷啟動(dòng),這時(shí)候你的應(yīng)用程序的進(jìn)程是沒(méi)有創(chuàng)建的. 這也是大部分應(yīng)用的使用場(chǎng)景.用戶在桌面上點(diǎn)擊你應(yīng)用的 icon 之后,首先要?jiǎng)?chuàng)建進(jìn)程,然后才啟動(dòng) MainActivity.這時(shí)候adbshell am start -w packagename/MainActivity 返回的結(jié)果,就是標(biāo)準(zhǔn)的應(yīng)用程序的啟動(dòng)時(shí)間。注意Android 5.0 之前的手機(jī)是沒(méi)有WaitTime這個(gè)值的杭措。關(guān)于ThisTime/TotalTime/WaitTime的區(qū)別,下面是其解釋费什。 WaitTime=endTime-startTime
startTime記錄的剛準(zhǔn)備調(diào)用startActivityAndWait()的時(shí)間點(diǎn)
endTime記錄的是startActivityAndWait()函數(shù)調(diào)用返回的時(shí)間點(diǎn)
WaitTime = startActivityAndWait()調(diào)用耗時(shí)。
WaitTime 就是總的耗時(shí)手素,包括前一個(gè)應(yīng)用Activity pause 的時(shí)間和新應(yīng)用啟動(dòng)的時(shí)間鸳址;ThisTime 表示一連串啟動(dòng)Activity 的最后一個(gè) Activity 的啟動(dòng)耗時(shí);TotalTime表示新應(yīng)用啟動(dòng)的耗時(shí)泉懦,包括新進(jìn)程的啟動(dòng)和 Activity 的啟動(dòng)稿黍,但不包括前一個(gè)應(yīng)用Activity pause 的耗時(shí)。也就是說(shuō)崩哩,開(kāi)發(fā)者一般只要關(guān)心 TotalTime 即可巡球,這個(gè)時(shí)間才是自己應(yīng)用真正啟動(dòng)的耗時(shí)。
總結(jié)一下邓嘹,如果只關(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棚贾。
1.1.2 總結(jié)
該方法算出的時(shí)間是系統(tǒng)從開(kāi)始處理啟動(dòng)activity的時(shí)間到完成運(yùn)行l(wèi)ayout和draw函數(shù)的時(shí)間窖维,簡(jiǎn)單的理解就是啟動(dòng)這個(gè)Activity的時(shí)間,并不包括點(diǎn)擊icon到系統(tǒng)接收到消息的時(shí)間妙痹。顯然铸史,這個(gè)時(shí)間并不能完整的模擬用戶操作場(chǎng)景的啟動(dòng)時(shí)間。其次該方法只計(jì)算一個(gè)Activity的整體啟動(dòng)時(shí)間怯伊,沒(méi)有分別統(tǒng)計(jì)其中每個(gè)函數(shù)的時(shí)間琳轿,不便于定位問(wèn)題。針對(duì)這兩個(gè)問(wèn)題耿芹,我們接下來(lái)看一下下面兩個(gè)方法是怎樣解決的崭篡。
我們?cè)跍y(cè)試中關(guān)注的其實(shí)是用戶體驗(yàn)的啟動(dòng)時(shí)間,那么上面的時(shí)間就不能滿足我們的需求了猩系。既然是用戶體驗(yàn)我們可以用更直觀的方式媚送,使用screenrecord進(jìn)行屏幕錄制然后分析視頻中燥。
1.2 使用screenrecord進(jìn)行屏幕錄制
1.2.1 測(cè)試方法 (1)輸入命令adb shellscreenrecord --bugreport /sdcard/lanch.mp4--bugreport 參數(shù)會(huì)使視頻輸出一些時(shí)間信息和幀信息便于我們分析啟動(dòng)時(shí)間寇甸。 (2)點(diǎn)擊收集圖標(biāo),app完全啟動(dòng)后,使用ctrl+c結(jié)束視頻錄制拿霉。 (3)使用命令adb pullsdcard/lanch.mp4 ./吟秩,導(dǎo)出視頻 (4)導(dǎo)出視頻到電腦,使用可以按幀播放的視頻軟件打開(kāi)(mac上quicktime就可以绽淘,win下可以用kmplayer)涵防,并按幀播放。 如下圖所示: 圖2按幀播放視頻沪铭,視頻左上角會(huì)顯示每一幀的時(shí)間(精確到ms)和幀數(shù)壮池。如圖,11:09:38.031表示時(shí)分秒杀怠,f=333是幀數(shù)椰憋。在視頻中會(huì)看到icon會(huì)變暗然后高亮,高亮?xí)r就是系統(tǒng)開(kāi)始處理本次icon點(diǎn)擊事件了赔退〕纫溃可以把這里作為點(diǎn)擊時(shí)間,然后根據(jù)體驗(yàn)要求硕旗,看到app啟動(dòng)頁(yè)完全繪制完作為終止時(shí)間窗骑,這個(gè)時(shí)間減去點(diǎn)擊時(shí)間就是app的啟動(dòng)時(shí)間。
1.2.2 總結(jié) 該方法雖然可以模擬用戶的操作場(chǎng)景漆枚,但是操作成本較高且無(wú)法準(zhǔn)確清晰明了的知道哪些函數(shù)調(diào)用時(shí)間過(guò)長(zhǎng)创译。 以上兩種方法,單從啟動(dòng)時(shí)間看浪读,是無(wú)法定位出具體哪個(gè)函數(shù)耗時(shí)多一些昔榴,遇到啟動(dòng)時(shí)間大于預(yù)定的啟動(dòng)時(shí)間閥值時(shí),需一步步的打log碘橘,分析查明原因互订。下面的方法是貼吧目前計(jì)算啟動(dòng)時(shí)間的辦法,可以很清晰的看到每個(gè)函數(shù)的調(diào)用時(shí)間痘拆。
1.3 代碼埋點(diǎn)仰禽,查看輸出日志
1.3.1 測(cè)試方法 在代碼中打點(diǎn),輸出日志查看纺蛆。拿貼吧舉例吐葵,下圖是整個(gè)啟動(dòng)要經(jīng)歷的操作。 圖3具體每步做了哪些桥氏,可以參照下表温峭。 圖4這樣通過(guò)打點(diǎn)輸出日志來(lái)測(cè)試啟動(dòng)時(shí)間,QA就可以很方便的查看到具體每個(gè)模塊的耗時(shí)時(shí)間了字支,如下圖凤藏。
1.3.2 總結(jié) 這樣打點(diǎn)奸忽,可以清晰明了的看出Activity的總耗時(shí)及各個(gè)函數(shù)的耗時(shí)情況,這樣在測(cè)試過(guò)程中揖庄,如果遇到問(wèn)題可以很容易的定位到具體的函數(shù)栗菜。在測(cè)試過(guò)程中也有針對(duì)點(diǎn),比如貼吧直播后續(xù)會(huì)以插件的形式整合到貼吧里蹄梢,測(cè)試時(shí)疙筹,可以多關(guān)注plugin初始化的時(shí)間。
針對(duì)啟動(dòng)時(shí)間這一性能指標(biāo)禁炒,個(gè)人覺(jué)得打點(diǎn)輸出日志的方式較為理想而咆,QA在測(cè)試過(guò)程中發(fā)現(xiàn)有疑似問(wèn)題后,可以給出具體的函數(shù)耗時(shí)時(shí)間幕袱。
結(jié)束語(yǔ):想必大家已經(jīng)迫不及待的想去嘗試了吧翘盖,小編希望你們不為啟動(dòng)緩慢而焦慮!
推薦大家關(guān)注騰訊云社區(qū)微信公眾號(hào):QcloudCommunity
本文由騰云閣授權(quán)發(fā)布,未經(jīng)許可請(qǐng)勿轉(zhuǎn)載