DDMS是一个程序执行查看器,在里面可以看见线程和堆栈等信息,
TraceView是程序性能分析器,可以看到那个view 绘制使用了多长时间 。
Traceview是android平台配备一个很好的性能分析的工具。它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到method。
第一种方式:使用代码
首先,必须在程序当中加入代码,以便生成trace文件,有了这个trace文件才可以将其转化为图形。
要添加的代码如下:
Java代码
Debug.startMethodTracing("yourActivityTrace");
Debug.stopMethodTracing();
Google Dev Guide当中说可以在activity的onCreate()中添加Debug.startMethodTracing(), 而在onDestroy()中添加Debug.stopMethodTracing(),但是在实际的测试时发现这种方式其实并不好用,因为通常情况下我们的activity的onDestroy()是由系统决定何时调用的,因此可能等了很长时间都不会得到这个trace文件。因此决定在onStop()中来调用Debug.stopMethodTracing()。这样当我们切换到其它activity或者点击home键的时候onStop()就会被调用,我们也就可以得到完整的trace file。
trace文件保存到/sdcard/...当中。现在把这个文件copy到电脑上指定的目录,假设是C:/tracefile 目录下。
可以通过命令行来执行traceview,进入tools目录后,执行
traceview C:/tracefile/yourActivityTrace.trace
但是会提示如下的信息
新的adt 已经不支持使用 traceview 命令直接打开了 trace,相反更简单的是直接eclipse 直接就可以打开trace文件
file - openfile 即可
另外一种方式使用traceview 不用再写代码了,使用 Android Device Monitor 来
有两方面用途:
1 查看跟踪代码的执行时间,分析哪些是耗时操作
2 可以用于跟踪方法的调用,尤其是Android Framework层的方法调用关系
获取方法的调用顺序
1. 在traceview中搜索响应的方法名不能使用大写字母
2. 搜索出的方法会自动展开,其中包含Parents 和 Children 两组信息
3. 点击Parents下的方法名,直接跳转到调用当前的方法处。Children相反
上面是时间片面板(Timeline panel),下面是分析面板(Profilepanel)
时间片面板(Timeline panel):描述当每个线程和方法启动和停止
分析面板(Profile panel):提供了内部方法调用的总结
分析面板中参数的意义
英语 |
中文 |
Incl |
调用方法占用时间百分比 |
Inclusive |
调用方法时间(ms)(包括了所有方法的调用) |
Excl |
执行方法占用时间百分比 |
Exclusive |
执行方法占用时间(ms)(不包括子方法的调用) |
Calls+Recur Calls/Total |
调用和重复调用的次数 |
Time/Call |
总的时间(ms) |
dmtracedump 会根据trace文件 生成函数调用关系图
dmtracedump的使用方法:
dmtracedump [-ho] [-s sortable] [-d trace-base-name] [-g outfile] <trace-base-name>
参数 |
描述 |
-d <trace-base-name> |
Trace 文件的名称 |
-g <outfile> |
需要输出的问题 |
-h |
使用HTML输出 |
-o |
存储跟踪文件,而不是分析文件 |
-t <percent> |
最低门槛,包括子节点图中(孩子接点的包容性的时间占母接点包容性的时间)。如果不使用此选项,默认阈值是20%。 |
使用如下命令:
dmtracedump -g aa.png calc.trace
但是我失败了,出现错误:
ERROR: unable to read 1829330 bytes from trace file
Cannot read trace.
查看了一下stackoverflow
Do you try to use 'dmtracedump
' tool in the windows OS?
I think 'dmtracedump
' tool can't handle big files.. in my case.. Windows 7 32 bit.
Cmd> dmtracedump -g abc.png Large_Log.trace
ERROR: unable to read 8910087 bytes from trace file
Cannot read trace.
but, I succeeded to generate call graph image file in the ubuntu 64 bit OS.
the size of generated abc.png file is approximately 6 MB.
google group 上的回答
I generated another trace file in a linux box, and then
dmtracedump worked fine with that one.
Yes, I meet same problem in Window XP.
But It worked well in a linux box.
I still can't find how to solve this error.
好吧,回去用ubuntu试试
1、GProfile
一款Linux下测试应用程序的性能的工具。它可以提供函数调用的关系、每个函数的执行时间以及每个函数调用的次数。
2、OProfile
一款可以测试Kernel、以及Android下C/C++代码的工具。功能很强大。
3、TraceView
Android SDK自带的一个性能测试工具。它可以测试Android中应用以及Framework层中代码的工具。
4、NEON
NEON是一个新兴的技术,它是基于SIMD(单指令多数据)的技术。它可以加速多媒体的处理,给用户更流畅的体验。