Android 性能分析工具之TraceView

栏目: Android · 发布时间: 5年前

内容简介:其中testTraceView参数是自定义,其实就是生成的TraceView文件的文件名,例如testTraceView.trace2.打开testTrace.trace文件时报错 ,因为没有执行Debug.stopMethodTracing();打开testTrace.trace文件时报错的重要提示:Key section does not have an *end marker at com.android.traceview,说明没有添加或者执行Debug.stopMethodTracing();
  1. Traceview本身是一个数据分析工具, Android 平台将Traceview作为 Android SDK内置的一个工具,主要用于加载 Android 应用程序所生成的trace文件并且分析trace文件采集到的数据里面每个方法(函数)在不同线程里调用次数、消耗的时间等等。
  2. Trace文件里数据的采集则需要使用 Android SDK 中的 Debug 类或者利用 DDMS 工具
  3. Traceview在Android SDK的tools目录里,如下图:
    Android 性能分析 <a href='https://www.codercto.com/tool.html'>工具</a> 之TraceView

配置环境

  1. 步骤一:在系统变量里新建ANDROID_HOME

    Android 性能分析工具之TraceView
  2. 步骤二:在系统变量的Path里添加 %ANDROID_HOME%\tools

    Android 性能分析工具之TraceView

使用代码生成 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"/>
复制代码

报错示例

  1. 没有获取到权限
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窗口查看的截图:

Android 性能分析工具之TraceView

注意:如果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界面介绍

Android 性能分析工具之TraceView
Traceview 界面分上下两部分 上面是时间轴面板 (Timeline Panel)
  1. 左侧显示的是线程信息
  2. 右侧不同颜色代表不同方法(函数),同一个颜色越长代表该方法执行的时间越久
  3. 右侧鼠标放在上面会出现时间线纵轴,在顶部会显示当前时间线所执行的具体函数信息
  4. 空白表示这个时间段内没有执行内容

下面是分析面板

各列作用说明
列名 描述
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)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

R语言编程艺术

R语言编程艺术

(美)Norman Matloff / 陈堰平、邱怡轩、潘岚锋 等 / 机械工业出版社 / 2013-5 / 69.00

【编辑推荐】 这本书涵盖了R语言编程的诸多方面,尤其在面向对象编程、程序调试、提升程序运行速度以及并行计算等方面,填补了同类图书的空白。关于程序调试的章节更是作者多年经验的总结。不管是初学者还是有一定编程经验的读者,阅读这本书都会有所收获。 ——统计之都 【内容简介】 R语言是世界上最流行的用于数据处理和统计分析的脚本语言。考古学家用它来跟踪古代文明的传播,医药公司用它来探......一起来看看 《R语言编程艺术》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具