工欲善其事必先利其器。很多时候,学会使用一些工具能大大提高我们的开发效率,使我们事半功倍。所以,我要来分享一下一个工具:traceview。
Traceview是androidSdk里的一个性能分析工具,在优化UI的时候特别有用。这个工具可以在以下目录中找到,如下图:
这个工具可以用来分析android 程序产生的
现在假设我有一个叫做doDraw 的方法,我想对它进行性能分析。那么我需要在方法的开头加上
android.os.Debug.startMethodTracing("/sdcard/myView");
方法的结尾加上
android.os.Debug.stopMethodTracing();
加完后如下图所示:
加了以上两个语句之后,执行程序,可以看到
下面我们用ddms将myView.trace文件push到本地。之后使用Traceview查看此文件,Traceview使用方法如下图:
打开后得到如下的一个窗口如下图:
从上图可以看出,程序的大部分时间花在了绿色部分上。我们可以查看下半部分的详细分析,如下图:
我们可以看到,绿色部分占用时间为e.3 – 20.3% = 45%.
我们可以看到,这45%的时间中,所有时间都被Canvas.drawBitmap占用了。那么Canvas.drawBitmap是哪里调用的呢?我们单击此条目,这个时候展开了调用关系,如下图:
我们看到,调用Canvas.drawBitmap的是BitmapDrawable.draw.对应我们doDraw方法中的d.draw语句,因为d是一个BitmapDrawable的对象。如下图:
通过以上的分析,我们找到了程序的瓶颈就在于d.draw,所以
一些统计字段的解释:
Exclusive: 同级函数本身运行的时间
Inclusive 就是说除统计函数本身运行的时间外再加上调用子函数所运行的时间
Name:列出的是所有的调用项,前面的数字是编号,展开可以看到有的有Parent 和Children子项,就是指被调用和调用。
Incl: inclusive时间占总时间的白分比
Excl: 执行占总时间的白分比。
Calls+Recur Calls/Total: 调用和重复调用的次数
Time/Call: 总的时间。(ms)