的执行情况,某个方法执行时间、调用次数、在总体中的占比等,从而定位性能点。
1、生成日志,运行TraceView
运行TraceView有两种方式:
a、调用Debug类
在开始调试的地方,如Activity的OnCreate函数,添加:
Debug.startMethodTracing("tracefilename");
结束调试的地方,如Activity的OnCreate函数,添加:
Debug.stopMethodTracing();
之后运行你的app一段时间并退出会在sd卡根目录生成tracefilename.trace这个log文件,记录这段时间内的运行信息。
将日志文件pull到PC端,cmd 到 android
sdk tools 文件夹内(或绑定sdk tools目录到系统path内),运行 traceview
tracefilename.trace 即可打开 TraceView 分析界面,
b、使用DDMs
打开devices窗口,选择某个进程,点击右上角的 start method profiling。
运行app一段时间后,再点击已变成stop method
profiling的该按钮。eclipse 会自动弹出debug的标签(可通过菜单 File->save as 保存数据)界面同上面。这种方式不需要修改代码,所以对于没有源码的程序同样可以进行排查。同时可以方便的进行全局性能排查。
2、TraceView界面信息介绍
TraceView界面包括时间面板和方法面板
(1) 时间面板(Timeline-Panel)
时间面板展示了每个线程的执行情况,其中的[1]main即为ui主线程。
移动到某个位置可以查看该点对应的方法的执行信息,点击方法面板则会选中相应的方法。可以左键按住不放选中区域放大局部精细查看,不同方法用不同颜色标注。
(2) 方法面板(Profile-Panel)
方法面板展示了所有方法的执行情况,点击某个方法可以查看在对应线程上的执行时间区域,并会显示其父方法及子方法。
每个方法包括如下信息列,可点击某列进行排序,从而确定产生性能问题的函数:
Incl Cpu Time, Excl Cpu Time,
Incl Real Time, Excl Real Time, Incl Cpu Time%, Excl Cpu Time%, Incl Real Time%,
Excl Real Time%, Calls+RecurCalls/Total, Cpu Time/Call, Real Time/Call
所有的Time都是以毫秒计算。每列具体含义及作用如下:
Incl表示将所有子函数耗时也计算在内,Excl则表示不包括子函数的调用时间。对比可以确定耗时操作发生是自身还是子函数中。
Cpu Time表示占用cpu执行的时间,Real
Time包括Cpu Time以及等待、切换的时间等,所以一般都大于Cpu Time。对比可以判断耗时操作是否在cpu执行段内。
上面四个指标对应的%表示函数在总时间的占比。方便查看某个函数的时间占比。
Calls+RecurCalls/Total表示被外部调用次数+递归次数/总次数。可以查看调用次数是否符合自己预期。
Cpu Time/Call, Real
Time/Call表示总的Cpu Time及Real Time与总调用次数的比例。查看每次调用的耗时,一般可通过简单此项确定每个函数的性能。
你可能还想了解:使用TraceView性能分析工具的方法