android 效能分析之常用adb命令adb shell am start -W
阿新 • • 發佈:2019-01-23
檢視頁面啟動時間:
以啟動camera為例
adb shell am start -W com.mediatek.camera/com.android.camera.CameraActivity
[email protected]:/media/disk/work/core$ adb shell am start -W com.mediatek.camera/com.android.camera.CameraActivity Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.mediatek.camera/com.android.camera.CameraActivity } Status: ok Activity: com.mediatek.camera/com.android.camera.CameraActivity ThisTime: 2871 TotalTime: 2871 WaitTime: 2949 Complete
格式為adb shell am start -W 包名/全類名或叫activity名
列印的結果為
ThisTime 該activity啟動耗時
TotalTime 應用自身啟動耗時=ThisTime+應用application等資源啟動時間
WaitTime 系統啟動應用耗時=TotalTime+系統資源啟動時間
在測試該啟動時間時需要理解兩個概念
冷啟動:應用第一次啟動
熱啟動:按back按鍵後再啟動或非第一次啟動切沒有清除該應用後臺或快取資料
上面的資料為冷啟動列印的資料,下面執行熱啟動的測試結果:
[email protected]:/media/disk/work/core$ adb shell am start -W com.mediatek.camera/com.android.camera.CameraActivity Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.mediatek.camera/com.android.camera.CameraActivity } Status: ok Activity: com.mediatek.camera/com.android.camera.CameraActivity ThisTime: 1848 TotalTime: 1848 WaitTime: 1895 Complete
該命令具體實現在/frameworks/base/cmds/am/src/com/android/commands/am/Am.java,原理是跨Binder呼叫ActivityManagerService.startActivityAndWait() 介面,其中返回資料分別呼叫對應
startTime: 呼叫startActivityAndWait()的時間點
endTime: 呼叫startActivityAndWait()函式呼叫返回的時間點
WaitTime: 呼叫startActivityAndWait()呼叫耗時。
再通過之間的計算得到。