内容简介:其中testTraceView参数是自定义,其实就是生成的TraceView文件的文件名,例如testTraceView.trace2.打开testTrace.trace文件时报错 ,因为没有执行Debug.stopMethodTracing();打开testTrace.trace文件时报错的重要提示:Key section does not have an *end marker at com.android.traceview,说明没有添加或者执行Debug.stopMethodTracing();
- Traceview本身是一个数据分析工具, Android 平台将Traceview作为 Android SDK内置的一个工具,主要用于加载 Android 应用程序所生成的trace文件并且分析trace文件采集到的数据里面每个方法(函数)在不同线程里调用次数、消耗的时间等等。
- Trace文件里数据的采集则需要使用 Android SDK 中的 Debug 类或者利用 DDMS 工具
- Traceview在Android SDK的tools目录里,如下图:
配置环境
-
步骤一:在系统变量里新建ANDROID_HOME
-
步骤二:在系统变量的Path里添加 %ANDROID_HOME%\tools
使用代码生成 trace 文件
- 在需要分析代码的开始位置添加以下代码
//文件默认保存到 sdcard 根目录下,"/sdcard/testTraceView.trace" Debug.startMethodTracing("testTraceView"); 复制代码
其中testTraceView参数是自定义,其实就是生成的TraceView文件的文件名,例如testTraceView.trace
- 在需要分析的结束位置添加以下代码
Debug.stopMethodTracing(); 复制代码
需要添加的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 复制代码
报错示例
- 没有获取到权限
E/art: Unable to open trace file '/sdcard/testTrace.trace': Permission denied 复制代码
2.打开testTrace.trace文件时报错 ,因为没有执行Debug.stopMethodTracing();
Failed to read the trace filejava.io.IOException: Key section does not have an *end marker at com.android.traceview.DmTraceReader.parseKeys(DmTraceReader.java:420) at com.android.traceview.DmTraceReader.generateTrees(DmTraceReader.java:91) at com.android.traceview.DmTraceReader.<init>(DmTraceReader.java:87) at com.android.traceview.MainWindow.main(MainWindow.java:286) 复制代码
打开testTrace.trace文件时报错的重要提示:Key section does not have an *end marker at com.android.traceview,说明没有添加或者执行Debug.stopMethodTracing();
查看是否生成trace文件
进入到 shell 模式执行下面的指令语句在doc命令窗口或者AndroidStudio里Terminal窗口里执行adb shell,下图本人写的demo在AndroidStudio里Terminal窗口查看的截图:
注意:如果Debug.startMethodTracing("testTraceView");startMethodTracing里的参数只填写testTraceView,则上面的截图步骤只需要执行1、2两步就可看到testTraceView.trace文件 需要知道本人为什么执行3、4两步,请看本人demo里的startMethodTracing里的参数
导出trace文件
进入到shell模式执行下面的指令语句adb pull /sdcard/testTraceView.trace E:\folder命令将testTraceView.trace导出到指定到E盘folder目录。
本人demo里需要执行的命令是: adb pull /sdcard/TraceView/MainActivity_2018-12-07_20_29_02.trace E:\folder
打开trace文件
进入到shell模式执行下面的指令语句traceview E:\folder\testTraceView.trace
TraceView界面介绍
Traceview 界面分上下两部分 上面是时间轴面板 (Timeline Panel)- 左侧显示的是线程信息
- 右侧不同颜色代表不同方法(函数),同一个颜色越长代表该方法执行的时间越久
- 右侧鼠标放在上面会出现时间线纵轴,在顶部会显示当前时间线所执行的具体函数信息
- 空白表示这个时间段内没有执行内容
下面是分析面板
列名 | 描述 |
---|---|
Name | 该线程运行过程中所调用的函数名 |
Incl Cpu Time | 某函数占用的CPU时间,包含内部调用其它函数的CPU时间 |
Excl Cpu Time | 某函数占用的CPU时间,但不含内部调用其它函数所占用的CPU时间 |
Incl Real Time | 某函数运行的真实时间(以毫秒为单位),内含调用其它函数所占用的真实时间 |
Excl Real Time | 某函数运行的真实时间(以毫秒为单位),不含调用其它函数所占用的真实时 |
Call+Recur Calls/Total | 某函数被调用次数以及递归调用占总调用次数的百分比 |
Cpu Time/Call | 某函数调用CPU时间与调用次数的比。相当于该函数平均执行时间 |
Real Time | 同CPU Time/Call类似,只不过统计单位换成了真实时间 |
注意:每一个Time列还对应有一个用时间百分比来统计的列(如Incl Cpu Time列对应还有一个列名为Incl Cpu Time %的列,表示以时间百分比来统计的Incl Cpu Time)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Golang 性能测试 (2) 性能分析
- 用 dotTrace 进行性能分析时,各种不同性能分析选项的含义和用途
- 十大MySQL性能分析工具汇总!专治MySQL性能瓶颈
- 阿里重磅开源性能测试神器,性能监控分析工具 Arthas
- 抖音 Android 性能优化系列:新一代全能型性能分析工具 Rhea
- 页面渲染:性能分析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。