TraceView 简介:
TraceView 是Android平台提供的数据分析工具,通过它我们可以对内存泄漏等性能问题进行定位,需要明确的是,它只是分析工具,而不是数据采集工具,数据的采集是通过Debug类或者DDMS工具来采集的。
数据采集:
生成 trace 文件有两种方法:
1.使用代码
2.使用 DDMS
1.使用代码生成trace文件:
Debug.startMethodTracing("haierapp"); //开始trace,生成的文件保存到 /sdcard/haierapp.trace
........ //被trace的代码
Debug.stopMethodTracing(); //结束
这部分代码很简单,之后生成的trace文件被保存到 /sdcard/haierapp.trace目录下,我们用命令把它导出来:
adb pull /sdcard/haierapp.trace ./
使用代码生成trace文件有一个好处,就是你可以任意选择追踪开始的位置和结束的位置,比较灵活。
2.使用工具DDMS生成trace文件:
按照如下操作打开DDMS视图:
按照如下操作,选择你要trace的app,然后点击按钮开始trace:
然后操作app,系统会记录你操作过程中的一些数据,然后按照如下操作:
之后生成trace文件,下面是trace文件打开之后的视图:
上图介绍了 TraceView 的大致内容:
上半部分显示了 不同线程的执行时间
其中不同的颜色表示不同的方法
同一个颜色越长,说明执行时间越久,如图中的主线程 main
空白表示这个时间段内没有执行内容
下半部分展示了不同方法的执行时间信息,关键指标有三个:
Cpu Time/Call :该方法平均占用 CPU 的时间
Real Time/Call :平均执行时间,包括切换、阻塞的时间,>= Cpu Time
Calls + Recur Calls/Total :调用、递归次数
点击下面的任意一个方法,可以看到它的详细信息:
Parents:选中方法的调用处
Children:选中方法调用的方法
根据TraceView显示内容 定位问题:
1.先从上半部分看哪个线程执行时间较长?什么时候开始执行的?与主线程的交错时间?
2.在下方视图查看那些方法执行时间较长:
点击TraceView视图中的 Cpu time/call ,按照占用cpu时间由高到低排序。
3.点击TraceView视图中的 Calls + Recur Calls/Total 按照调用次数由高到低排序。
排序后先从排位靠前的开始分析,分析具体是哪里耗时并进行优化,为了方便,也可以在下面find输入框内输入包名进行过滤,以达到快速定位的效果。