APP——啟動時間測試——adb命令


 

1、概念:

 

冷啟動:當啟動應用時,后台沒有該應用的進程,這時系統會重新創建一個新的進程分配給該應用,這個啟動方式就是冷啟動。

 

熱啟動:當啟動應用時,后台已有該應用的進程(例:按back鍵、home鍵,應用雖然會退出,但是該應用的進程是依然會保留在后台,可進入任務列表查看),所以在已有進                 程的情況下,這種啟動會從已有的進程中來啟動應用,這個方式叫熱啟動。

 

首次啟動:首次啟動嚴格來說也是冷啟動,之所以把首次啟動單獨列出來,一般來說,首次啟動時間會比非首次啟動要久,首次啟動會做一些系統初始化工作,如緩存目錄的生                    產,數據庫的建立,SharedPreference的初始化,如果存在多 dex 和插件的情況下,首次啟動會有一些特殊需要處理的邏輯,而且對啟動速度有很大的影響,所以                     首 次啟動的速度非常重要,畢竟影響用戶對 App 的第一映像。

 

 

 

2、am start -W packagename/activity 命令 (W大寫)

 

 

 

WaitTime:包括前一個應用 Activity pause 的時間和新應用啟動的時間,稍微大點。


TotalTime: 表示新應用啟動的耗時,包括新進程的啟動和 Activity 的啟動,但不包括前一個應用Activity pause的耗時(真正的啟動耗時)

 

ThisTime: 表示一連串啟動 Activity 的最后一個 Activity 的啟動耗時

 

 

 

 ===========================================================================================

 

測試方法:adb shell am start -W packagename/MainActivity命令,計算啟動時間

--------------------------------------------------------------------------------------------------------------------------

 

示例:

 

adb    shell    am    start   -W    com.android.calculator2/com.android.calculator2.Calculator

 

 

 

ThisTime:最后一個Activity啟動耗時

TotalTime:所有Activity啟動耗時

WaitTime:AMS啟動Activity的總耗時

總結:線下使用方便,不能帶到線上

不嚴謹、非精確地時間

 

 

===========================================================================

 

關於ThisTime/TotalTime/WaitTime的區別,下面是其解釋。WaitTime=endTime-startTime

  • startTime記錄的剛准備調用startActivityAndWait()的時間點

  • endTime記錄的是startActivityAndWait()函數調用返回的時間點

  • WaitTime = startActivityAndWait()調用耗時。

 

 

WaitTime 就是總的耗時,包括前一個應用Activity pause 的時間和新應用啟動的時間;

ThisTime 表示一連串啟動Activity 的最后一個 Activity 的啟動耗時;

TotalTime表示新應用啟動的耗時,包括新進程的啟動和 Activity 的啟動,但不包括前一個應用Activity pause 的耗時。

 

 

也就是說,開發者一般只要關心 TotalTime 即可,這個時間才是自己應用真正啟動的耗時。

 

 

總結一下,如果只關心某個應用自身啟動耗時,參考TotalTime;

如果關心系統啟動應用耗時,參考WaitTime;

如果關心應用有界面Activity啟動耗時,參考ThisTime。

 

=========================================================================================

 

1.2、手動打點


啟動時埋點,啟動結束時埋點,二者差值

 

public class LaunchTimer {

private static long sTime;

public static void startRecord() {
sTime = System.currentTimeMillis();
}

public static void endRecord() {
endRecord("");
}

public static void endRecord(String msg) {
long cost = System.currentTimeMillis() - sTime;
LogUtils.e(msg + " cost " + cost + "ms");
}

}

 


總結:精確,可帶到線上,推薦使用

避開誤區,采用Feed第一條展示

誤區:onWindowFocusChanged只是activity的首幀繪制時間,APP啟動的結束時間記在這里是不准確的。我們所要的時間,是用戶真正看到整個界面的時間。

正解:真實數據展示,Feed第一條展示(即adapter中的第一條數據)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM