1. 程式人生 > >android 效能分析之常用adb命令adb shell am start -W

android 效能分析之常用adb命令adb shell am start -W

檢視頁面啟動時間:

以啟動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()呼叫耗時。

再通過之間的計算得到。