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

来源:互联网 发布:淘宝优惠券怎么用不了 编辑:程序博客网 时间:2024/05/29 16:13

查看页面启动时间:

以启动camera为例

adb shell am start -W com.mediatek.camera/com.android.camera.CameraActivity

ubuntu@ubuntu:/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: 2949Complete

格式为adb shell am start -W 包名/全类名或叫activity名

打印的结果为

ThisTime  该activity启动耗时

TotalTime  应用自身启动耗时=ThisTime+应用application等资源启动时间

WaitTime  系统启动应用耗时=TotalTime+系统资源启动时间

在测试该启动时间时需要理解两个概念

冷启动:应用第一次启动

热启动:按back按键后再启动或非第一次启动切没有清除该应用后台或缓存数据

上面的数据为冷启动打印的数据,下面运行热启动的测试结果:

ubuntu@ubuntu:/media/disk/work/core$ adb shell am start -W com.mediatek.camera/com.android.camera.CameraActivityStarting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.mediatek.camera/com.android.camera.CameraActivity }Status: okActivity: com.mediatek.camera/com.android.camera.CameraActivityThisTime: 1848TotalTime: 1848WaitTime: 1895Complete

该命令具体实现在/frameworks/base/cmds/am/src/com/android/commands/am/Am.java,原理是跨Binder调用ActivityManagerService.startActivityAndWait() 接口,其中返回数据分别调用对应

startTime:  调用startActivityAndWait()的时间点

endTime:   调用startActivityAndWait()函数调用返回的时间点

WaitTime:  调用startActivityAndWait()调用耗时。

再通过之间的计算得到。



原创粉丝点击