TraceView 是 Android 平台配备一个很好的性能分析的工具。它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到 method。


TraceView 简介

TraceView 是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的 hotspot。TraceView 本身只是一个数据分析工具,而数据的采集则需要使用 Android SDK 中的 Debug 类或者利用 DDMS 工具。二者的用法如下:

  • 开发者在一些关键代码段开始前调用 Android SDK 中 Debug 类的 startMethodTracing 函数,并在关键代码段结束前调用 stopMethodTracing 函数。这两个函数运行过程中将采集运行时间内该应用所有线程(注意,只能是 Java 线程)的函数执行情况,并将采集数据保存到 /mnt/sdcard/ 下的一个文件中。开发者然后需要利用 SDK 中的 TraceView 工具来分析这些数据。
  • 借助 Android SDK 中的 DDMS 工具。DDMS 可采集系统中某个正在运行的进程的函数调用信息。对开发者而言,此方法适用于没有目标应用源代码的情况。

DDMS 中 TraceView 使用示意图如下,调试人员可以通过选择 Devices 中的应用后点击 按钮 Start Method Profiling(开启方法分析)和点击 StopMethod Profiling(停止方法分析)

开启方法分析后对应用的目标页面进行测试操作,测试完毕后停止方法分析,界面会跳转到 DDMS 的 trace 分析界面,如下图所示:

TraceView 界面比较复杂,其 UI 划分为上下两个面板,即 Timeline Panel(时间线面板)和 Profile Panel(分析面板)。上图中的上半部分为Timeline Panel(时间线面板),Timeline Panel又可细分为左右两个Pane:

  • 左边 Pane 显示的是测试数据中所采集的线程信息。由图可知,本次测试数据采集了 main 线程,传感器线程和其它系统辅助线程的信息。
  • 右边 Pane 所示为时间线,时间线上是每个线程测试时间段内所涉及的函数调用信息。这些信息包括函数名、函数执行时间等。由图可知,Thread-1412线程对应行的的内容非常丰富,而其他线程在这段时间内干得工作则要少得多。
  • 另外,开发者可以在时间线 Pane 中移动时间线纵轴。纵轴上边将显示当前时间点中某线程正在执行的函数信息。

上图中的下半部分为ProfilePanel(分析面板),Profile Panel 是 TraceView 的核心界面,其内涵非常丰富。它主要展示了某个线程(先在 Timeline Panel 中选择线程)中各个函数调用的情况,包括 CPU 使用时间、调用次数等信息。而这些信息正是查找 hotspot 的关键依据。所以,对开发者而言,一定要了解 Profile Panel 中各列的含义。下表列出了Profile Panel 中比较重要的列名及其描述。

实战分析:

首先找到自己写的类,这里以我上图中自己写的AddGoodsMatchActivity为例,可以知道其onCreate方法公占用314.069ms,onCreate方法里的各个方法占用时间也很清楚。重点分析其setContentView方法,因为它占用266.874ms 占整个onCreate方法的82.5%,点击setContentView方法

再点击SetContentView


再点击inflate

由此我们可以看到我们自己的方法调用的时间,调用的次数,从而分析问题所在

作者:Jo__yang 发表于2016/3/31 11:30:21 原文链接 阅读:3 评论:0 查看评论

更多相关文章

  1. C语言函数的递归(上)
  2. Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundErro
  3. Android之Service案例-电话窃听
  4. Android(安卓)组件系列之Activity的传值和回传值
  5. Android(安卓)- toolbar 优化 title修改边距和navigation icon修
  6. Android(安卓)程序完全退出的几种方法(参考)
  7. Looper类浅析
  8. android上拔出sd卡导致flash上媒体也消失问题解决方法
  9. android中的网络解析xml,json,html框架

随机推荐

  1. for循环是先执行循环体语句,后判断表达式
  2. c语言文件读写操作有哪些?
  3. c语言源程序的扩展名是什么?
  4. c语言中switch的用法是什么?
  5. C语言中void是什么意思?
  6. C语言中for语句的执行过程是什么?
  7. c语言中“&&”什么意思?
  8. 在c语言中,一条简单语句的结束符为什么?
  9. 逻辑运算符两侧运算对象的数据类型是什么
  10. strcat函数的作用是什么?