Android 性能优化之TraceView分析

前言:前两天接到了优化我们项目进入二级页面速度的任务,才突然发现一直忙着pm定的各种业务需求,好久没有去专门做性能方面提升的工作了。就自然的选择了用TraceView来分析卡顿的原因,在这次优化算是结束的时候我想着就当是作为对经典又好用的TraceView致敬从而写了这篇简单大众的文章。

先给需要的小白科普一下,TraceView是什么?

TraceView 是 Android 平台特有的数据采集和分析工具,主要用做热点分析,找出最需要优化的点。TraceView 从代码层面分析性能问题,针对每个方法来分析,比如当我们发现我们的应用出现卡顿的时候,我们可以来分析出现卡顿时在方法的调用上有没有很耗时的操作。

通过TraceView,我们可以得到两种数据:

  • 单次执行最耗时的方法
  • 执行次数最多的方法

下面说说TraceView怎么使用呢?

在性能优化分析中作为神器地位的TraceView其实就是那么的简单好用,下面几步就可以搞定了:

友情提示:下面的流程是我自己使用时的方式和做法,TraceView的使用方式不止下面这一种呦!!

一:生成 .trace 文件。

根据自己的需要选择跟踪范围,在想要分析的代码片段之前写入开始跟踪的代码:(参数为文件的保存的地址,比如手机的sdcard目录下,文件的名字不需要加 .trace后缀)

Debug.startMethodTracing(“trace”);

在想要分析的代码片段之后写入结束跟踪的代码:(在指定的路径会生成.trace文件)

Debug.stopMethodTracing();

二:打开 .trace 文件。

先打开Android Device Monitor,-->File-->openFile,打开已有的.trace文件即可。

如果是mac电脑,可以用终端adb命令先把文件送到电脑上当前目录下面:

adb pull sdcard/trace.trace   test.trace

就会得到下面图片那样的界面了:

下面是我对该界面做的一个简单的介绍:

1.线程面板是显示在分析的时间段内所有的执行的线程,包括main和其他子线程。

2.时间线面板以每个线程为一行,是该线程在整个过程中方法执行的情况,一行中有很多的小色块。这些色块代表采集过程中方法调用时间线,相同的颜色代表相同的方法,其中的每一个小色块就代表一次方法的调用,色块的长度代表方法执行时间的长短,左边为第一个色块代表方法执行开始,最右边色块代表最后一个方法执行结束,有时候可以根据色块长度来做个大致判断,哪一个方法执行时间相对来说比较长,你可以把鼠标放到色块上,就会显示该方法调用的详细信息,你可以随意滑动你的鼠标,滑倒哪里,左上角就会显示该方法调用的信息,并且可以按住CTRL键加鼠标滚轮进行放大。

友情提示:如果一不小心滑倒了不知道什么情况的地步,想回到最初的状态,双击时间线就可以!!

最后,重点是下面的数据分析面板:

在数据分析面板,你可以点击某个函数展开更详细的信息,如下图:

每个函数展开后,基本会有以下两个类别:

  • Parents:调用该方法的父类方法
  • Children:该方法调用的子类方法

如果该方法含有递归调用,可能还会多出两个类别:

  • Parents while recursive:递归调用时所涉及的父类方法
  • Children while recursive:递归调用时所涉及的子类方法

在数据分析面板的每一列,各个字段的含义如下:

我用TraceView分析时最关心的数据有:
Calls + Recur Calls / Total   和    Cpu Time / Call
因为我们最关心的有两点,一是调用次数不多,但每次调用却需要花费很长时间的函数。这个可以从Cpu Time / Call反映出来。

另外一个是那些自身占用时间不长,但调用却非常频繁的函数。这个可以从**Calls + Recur Calls / Total **反映出来。

点击Calls + Recur Calls这一栏,可以按照方法调用次数排序;点击Cpu Time / Call这一栏,可以按照方法调用时间排序。

好了,到此就可以根据查出来的方法的执行时间来做自己需要的优化了!!

see you

你可能感兴趣的:(温故而知新)