Android性能调试工具的使用

来源:互联网 发布:可可英语好用吗 知乎 编辑:程序博客网 时间:2024/04/29 06:43

一、TraceView工具

traceview是常用的调试工具之一,下面来通过例子描述下。

在4.4的开发者模式中打开GPU呈现模式分析,设置为按线条,然后下面会出现一串的柱状图,大致有三种颜色,蓝色、红色、黄色。另外有一条绿线。

(蓝色)Draw:表示在Java中创建显示列表部分中,OnDraw()方法占用的时间。比如你在一个列表的生成函数里加入了sleep,会发现蓝色部分会很长。 

(红色)Process:表示渲染引擎执行显示列表所花的时间,view越多,时间就越长。

(黄色)Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间。其实是实际显示帧数据的后台缓存区与前台缓冲区交换后并将前台缓冲区的内容显示到屏幕上的时间。 通常这个值不太会变,挺短。

下面用一个实例来说明这些问题
这里写图片描述
如上是一段代码,一个activity中包含一个列表。然后启动时起一个线程去loaddata,我在这个loaddata函数中人为sleep了一段时间。下面来看下启动过程中traceview的结果。

这里写图片描述

先解释下图中的含义,上面部分是代表当前进程有几个线程在跑,以及每个线程用的时间。

下面部分是显示了每个函数所用的时长。
我们把Incl Real time按从大到小排列下,会发现标号为39的函数所用的时间占比为16%,是自己代码中能调用的函数里最大的。显然这里就是主要的耗时大户。在这个函数中显示loadData这个名称,正好是我们上面加入sleep的函数。点击它可以看到如下图片,有两部分,一个是Parents,另一个是Children。

Parent表示调用这个方法的方法,可以叫做父方法
Children表示这个方法中调用的其他方法,可以叫做子方法

这里写图片描述

可见sleep是罪魁祸首。

当然可能有时候耗时最大的操作并不是在我们自己定义的函数中。这时需要求找可能存在拼镜,比如getview里是不是有东西耗时有点长导致整个时间太长。可以找对应的函数值看下。

二、显示GPU过度绘制
该工具的启动页面也在开发者设置里,选中即可。
然后再屏幕上有各种颜色的框显示,过度绘制情况的好坏通过颜色来表示,从蓝色、绿色、淡红色到红色 ,分别代表从好到坏(1x过度绘制、2x过度绘制、3x过度绘制和超过4x过度绘制)。少量的淡红色可以接受,二红色就是实现有问题,需要解决。没有颜色表明没有过度绘制。

查看了大致情况后,android也提供了一个分析层次的工具给我们,

Hierarchy Viewer,我们来看下上面这个例子的页面截图

这里写图片描述
右边是他的view的层次结构,可以看到具体的index和分层。如果哪个太多了就尽量减少之。

0 0
原创粉丝点击