APP啓動時間抓取

Android用戶也許會經常碰到以下的問題:
1)應用後臺開着,手機很快沒電了——應用耗電大;
2)首次/非首次啓動應用,進入應用特別慢——應用啓動慢;
3)應用使用過程中,越來越卡——CPU能力不足/內存泄露;
4)應用頁面卡頓——幀率較低、頁面卡頓。
因此,對開發的Android應用,必須對其進行性能測試,不然將會直接影響用戶體驗。
Android應用性能測試通常包括:啓動時間、內存、CPU、耗電量、流量、流暢度等。我們將在這個月陸續爲大家簡單介紹一下每個測試點的常見測試方法及簡單的定位思路,僅供參考。本期先介紹啓動時間的測試方法。

啓動時間
對於App的性能測試,啓動時間是個重要指標,啓動時間分爲兩種情況,一種是冷啓動時間(通常是系統重啓,即在啓動前沒有該App進程的情況),另一種是熱啓動,即App從被切換到前臺(點back退出後再點擊圖標啓動)。QA測試時,一般關注冷啓動的啓動時間。以下介紹三種測試啓動時間的方法,供大家參考,可以有針對性的使用。
1.1 使用adb命令
1.1.1 測試方法
輸入adbshell am start -W packagename/MainActivity命令,計算啓動時間。如下圖:

圖1
應用第一次啓動也就是我們常說的冷啓動,這時候你的應用程序的進程是沒有創建的. 這也是大部分應用的使用場景.用戶在桌面上點擊你應用的 icon 之後,首先要創建進程,然後才啓動 MainActivity.這時候adbshell am start -w packagename/MainActivity 返回的結果,就是標準的應用程序的啓動時間。注意Android 5.0 之前的手機是沒有WaitTime這個值的。關於ThisTime/TotalTime/WaitTime的區別,下面是其解釋。

  • startTime記錄的剛準備調用startActivityAndWait()的時間點
  • endTime記錄的是startActivityAndWait()函數調用返回的時間點
  • WaitTime = startActivityAndWait()調用耗時。
WaitTime 就是總的耗時,包括前一個應用Activity pause 的時間和新應用啓動的時間;ThisTime 表示一連串啓動Activity 的最後一個 Activity 的啓動耗時;TotalTime表示新應用啓動的耗時,包括新進程的啓動和 Activity 的啓動,但不包括前一個應用Activity pause 的耗時。也就是說,開發者一般只要關心 TotalTime 即可,這個時間纔是自己應用真正啓動的耗時。
總結一下,如果只關心某個應用自身啓動耗時,參考TotalTime;如果關心繫統啓動應用耗時,參考WaitTime;如果關心應用有界面Activity啓動耗時,參考ThisTime。

1.1.2 總結
該方法算出的時間是系統從開始處理啓動activity的時間到完成運行layout和draw函數的時間,簡單的理解就是啓動這個Activity的時間,並不包括點擊icon到系統接收到消息的時間。顯然,這個時間並不能完整的模擬用戶操作場景的啓動時間。其次該方法只計算一個Activity的整體啓動時間,沒有分別統計其中每個函數的時間,不便於定位問題。針對這兩個問題,我們接下來看一下下面兩個方法是怎樣解決的。
我們在測試中關注的其實是用戶體驗的啓動時間,那麼上面的時間就不能滿足我們的需求了。既然是用戶體驗我們可以用更直觀的方式,使用screenrecord進行屏幕錄製然後分析視頻。
1.2 使用screenrecord進行屏幕錄製
1.2.1 測試方法
(1)輸入命令adb shellscreenrecord --bugreport /sdcard/lanch.mp4--bugreport
     參數會使視頻輸出一些時間信息和幀信息便於我們分析啓動時間。
(2)點擊收集圖標,app完全啓動後,使用ctrl+c結束視頻錄製。
(3)使用命令adb pullsdcard/lanch.mp4 ./,導出視頻
(4)導出視頻到電腦,使用可以按幀播放的視頻軟件打開(mac上quicktime就可以,win下可以用kmplayer),並按幀播放。
如下圖所示:


圖2
按幀播放視頻,視頻左上角會顯示每一幀的時間(精確到ms)和幀數。如圖,11:09:38.031表示時分秒,f=333是幀數。在視頻中會看到icon會變暗然後高亮,高亮時就是系統開始處理本次icon點擊事件了。可以把這裏作爲點擊時間,然後根據體驗要求,看到app啓動頁完全繪製完作爲終止時間,這個時間減去點擊時間就是app的啓動時間。

1.2.2 總結
該方法雖然可以模擬用戶的操作場景,但是操作成本較高且無法準確清晰明瞭的知道哪些函數調用時間過長。
以上兩種方法,單從啓動時間看,是無法定位出具體哪個函數耗時多一些,遇到啓動時間大於預定的啓動時間閥值時,需一步步的打log,分析查明原因。下面的方法是貼吧目前計算啓動時間的辦法,可以很清晰的看到每個函數的調用時間。
1.3 代碼埋點,查看輸出日誌
1.3.1 測試方法
    在代碼中打點,輸出日誌查看。拿貼吧舉例,下圖是整個啓動要經歷的操作。


圖3

具體每步做了哪些,可以參照下表。

圖4

這樣通過打點輸出日誌來測試啓動時間,QA就可以很方便的查看到具體每個模塊的耗時時間了,如下圖。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章