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

查看页面启动时间:

命令行 ,在sdk 路径下(E:\SDK\Sdk\platform-tools\systrace)打开命令窗口 ,输入以下命令

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: 2949
Complete

格式为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.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()调用耗时。
再通过之间的计算得到。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、前言 随着项目版本的迭代,App的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关,从本篇文章开始,我...
    Android高级开发阅读 1,533评论 0 10
  • 应用启动的时间作为应用的门面,重要性可想而知。尤其在如今的快时代,一款秒开的App比一款启动需要耗费好几秒的App...
    付十一v阅读 1,004评论 0 10
  • 对于App的性能测试,启动时间是个重要指标,启动时间分为两种情况,一种是冷启动时间(通常是系统重启,即在启动前没有...
    Zzz_c7ec阅读 1,365评论 1 0
  • 性能的优化是一个老生常谈的点,也是一个比较重要的点。做过一点性能优化的工作,现在对工作中的优化点做一个总结。如有错...
    Xander_Wang阅读 420评论 0 1
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,606评论 28 53