Android应用性能检测工具之CPU篇

Android应用performance检测工具系列之CPU篇。

在Android应用的性能检测中,CPU是比较重要的一环。我们今天就从CPU检测开始说起。 Android平台提供了几个有用的工具。

TraceView

TraceView是Android平台提供的一个比较早的工具了,一直沿用到今,使用方法也越来越方便了。其主要的功能就是检测你的应用在运行过程中各个线程的CPU占用情况,依据此可以找出你的应用‘慢’在了什么地方,从而可以进行相应的优化。

TraceView现在已经集成在了Android Studio中,所以使用起来也很简单:

抓取TraceView数据

  • 首先从从Android Studio中启动Android Device Monitor: Tools -> Android -> Android Device Monitor.
  • 连接你的手机设备,并运行要监测的应用。
  • 在DDMS 窗口中的左侧找到你的应用并选择。
  • 操作你的应用,需要检测时点击DDMS中的‘start method profiling’图标,停止时再次点击该图标(已经变成了‘stop mehtod profiling’).

另外,你还可以在应用中加入抓取TraceView数据的代码,以便能够精确抓取所关注的时间段:

 // start tracing to "/sdcard/calc.trace"
Debug.startMethodTracing("calc");
// ...
// stop tracing
Debug.stopMethodTracing();

分析TraceView数据

拿到dump出来的数据后,接下来就是要分析了。如果你用的是第一种方法(Android Studio自带的DDMS)dump的数据,那么在你点击‘stop method profiling’之后,ddms会将dump到的prfiling数据呈现出来。如果是用的第二种方法,也就是代码的方式获得到的数据,那么你需要利用android自带的traceview工具将其打开。

打开后的profiling数据显示为上下两部分,Timeline区域和Profile区域:

上面的timeline区域是你测试的应用中每个线程的执行情况,每个线程占一行;并且一条timeline上的每一块都表示一个执行的method;每个method用不同的颜色表示。

下面的profile区域是按照每个方法所占的incl CPU time %进行排序将它们显示出来。其中每个函数显示的数值包括以下几种:

  1. Incl Cpu Time(%): Include意味着不仅仅是本身执行所占的时间(比),还包括其调用的函数(嵌套)的执行占用时间(比)
  • Excl Cpu Time(%): 的
  • Incl Real Time: 同1类似
  • Excl Real Time:同2类似
  • Calls + Recur Calls / Total:它表示这个方法执行的次数,这个指标中有两个值,一个Call表示这个方法调用的次数,Recur Call表示递归调用次数
  • Cpu Time / Call:每次调用执行该函数所用的cpu time。
  • Real Time / Call: 同6类似

所以我们在实际的分析过程中,可以从某一项入手,比如先看第一项Incl Cpu Time(默认是按照这一项将所有的方法排序的,当然我们也可以点击其他项,从而使用其他项排序),然后从上到下,也就是观察占用CPU最多的几个函数,看看哪一个是我们可以控制并且有可能可以优化的。在观察某一个函数的时候,可以将其点开,查看它的所有child,重点观察占用比例最高的一两个,然后点击进去一步步的跟踪。其中或许还要观察其他参数,比如calls + Recur Calls / Total看看是否有多余的调用等。总之只要细心还是很容易找到可以优化的点的。

Systrace

Android平台提供的另外一个CPU profiling工具是Systrace,它不仅可以收集你的应用的profiling数据,还可以收集系统的数据。非常实用用来找到你的应用在执行过程中所遇到的瓶颈所在。

具体使用方法可以参考这篇
官方文章,不再赘述。

Reference