TraceView是android的一个可视化的调试工具。借助它,你可以具体了解你的代码在运行时的性能表现。它能帮你更好了解到代码运行过程的效率,进而改善代码,提高你应用的体验。
在用TraceView工具之前,你需要先生成TraceView日志文件,文件包含了应用的跟踪的相关信息,然后再用TraceView工具对文件进行分析。
生成Trace日志的两种方法
代码方式
在代码中使用Debug类来跟生成日志文件,调用startMethodTracing()方法开始跟踪,调用stopMethodTracing()方法来结束跟踪。用代码生成日志好处是你可以很精确地控制跟踪的范围,因为你可以自己设置开始与结束跟踪的位置。
使用该种方式生成文件,要注意:
需要在AndroidManifest文件中添加下面权限READ_EXTERNAL_STORAGE,允许你的应用对外存储空间进行写操作。
下面是使用的Debug类来生成日志的一个示例:
// start tracing to "/sdcard/calc.trace" Debug.startMethodTracing("calc"); // ... // stop tracing Debug.stopMethodTracing();
比如说,你可以在onCreate()里调用startMethodTracing()来开始跟踪,在onDestroy()方法里使用stopMethodTracing()来结束跟踪。
调用startMethodTracing(“calc”),系统就会将跟踪文件指定名字命为calc。如果你使用startMethodTracing(),系统将会跟踪日志文件的默认命名为trace-base-name.trace.当你调用startMethodTracing()方法后,系统开始缓存数据并写入到日志文件,一直到你调用stopMethodTracing。如果在调用结束跟踪方法之前,系统达到缓存大小时,会主动结束日志跟踪并向通知栏发送通知。
创建完日志文件后,需要将日志文件从手机里复制到电脑上。你可以使用下面命令进行复制操作:
adb pull /sdcard/calc.trace /tmp
在TraceView上查看跟踪的日志文件
使用traceview <trace-base-name>格式的命令可以进行查看日志文件,如下:
traceview /tmp/calc
直接使用Trace
首先在DDMS的Devices的面板下选中你想要跟踪应用的进程,然后点击下面图中所示的图标,
点击图标后,弹出下面的对话框
Traceview提供了两种日志跟踪模式:
a.跟踪型。跟踪每个方法从进到出的整个过程。这种方式能提供准确的执行信息,但是占用机器的资源较大。
b.抽样型。按照一个的频率通过虚拟机来采集数据。这种方式较前一种消耗资源较少,但需要更长的执行时间以获取代表性的数据。同时,你还可以自定义数据采集的频率。
点击ok,运行你的应用一段时间后,再点击Devices面板的那个按钮结束数据采集,等待几秒,TraceView会自动将采集的数据展示出来。
了解TraceView的具体使用
TraceView可以将采集的数据信息以视图的方式呈现。TraceView的视图有两部分组成:
-时间轴面板。提供了一个线程和方法从开始到结束的时间内的信息。
-Profile面板。提供某个方法执行的相关信息。
时间轴面板
下图是时间轴面板的一个示例。左栏部分表示不同的线程,每一个线程占据一行,例子中第一行[1]main就是主线程。右栏里的是一个时间轴,时间从左往右逐渐递增,你可以清晰地从表中看到不同的线程在不同时间段所执行需要的时间。具体到每个线程,你可以查看到执行不同方法所需要的时间,不同的方法用不同的颜色所代替(补充,这些颜色都是交替轮回的使用来代替不同的方法)。在绘制的图块下面有细线出现,被细线选中的部分就是你所选的方法所执行的时间。
小提示,
使用TraceView时,要想对某部分你感兴趣的色块进行放大,用鼠标对你所感兴趣的色块进行框选就ok了。
但TraceView并不支持对面板的时间轴的直接缩小,你可使用下面两种方式来对时间轴缩小。
a.点击「时间轴面板」的左上角,时间轴会恢复到最开始全局面貌状态。
b.将鼠标放大「时间轴面板」的右上角,鼠标会发生变化,然后将鼠标向左方拉伸,这时你可以看到更多的时间轴内的信息。
信息面板
Profile面板包含了你所跟踪时间内所执行的方法的信息,主要展示的有两方面:
a.某方法执行的信息,这些信息包括
Incl Cpu Time 某方法占用Cpu的时间
Excl Cpu Time 某方法本身(不包括子方法)占用Cpu的时间
Incl Real Time 某方法真正执行的时间
Excel Real Time 某方法本身(不包括子方法)真正执行的时间
Calls+RecurCalls 调用次数+递归回调的次数
Cpu Time/Call
Real Time/Call
b.点击左侧某个方法,可以查看更多信息,父方法和所有子方法的具体信息,其中父方法的所在的行用紫色背景,子方法所在的行用黄色的背景。
点击右侧栏的某一列的名字,可以让表按该列的数据大小的顺序进行全局排列。通过数据展示,你可以容易地找到怀疑降低应用性能部分的方法。
比如说,在[信息面板]上,你可以从占用Incl Cpu Time最长的那个方法下手,那个方法是不是调用次数多,是不是属于正常情况吗。如果某个方法占用Cpu的时间长,但是调用的次数并不多,这种情况更加值得怀疑,结合具体方法进行查看,是不是代码写得不够好。
TraceView提供是在代码执行过程在不同线程里,不同方法所占用的Cpu时间,被调用次数的信息。它能有效帮助你对代码的性能的好坏做出判断,借助它你可进一步来改善代码提高应用的性能和用户体验。