TraceView 是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的 hotspot,也就是通过每个函数的时间消耗查找出性能瓶颈。TraceView 本身只是一个数据分析工具,而数据的采集则需要使用 Android SDK 中的 Debug 类或者利用 DDMS 工具。
生成 trace 文件有三种方法:使用代码、使用 Android Studio、使用 DDMS
1、如果使用代码Debug类,那么需要在分析的目标代码前加上startMethodTracing函数,结束的地方加上stopMethodTracing函数,将会采集这两个函数运行时间内,所有java线程的函数执行情况,并将采集的数据保存到/mnt/sdcard/下的一个文件中,文件由startMethodTracing函数传入。然后将trace文件pull到pc中,用traceview或者开发工具打开即可。这个方法的优点是追踪的代码相对明确一点,但是操作稍微复杂
2、使用android studio 打开。在Android Monitor工具中,有一栏是CPU 监控,这里会有一个闹钟似的的按钮,未启动应用时是灰色。启动应用后点击它,开始追踪,相当于startMethodTracing,要停止时再次点击就会生成。
3、使用DDMS生成。调试程序启动后,打开ddms,选择device中的程序,点击按钮"start Method profiling"开始追踪,再次点击停止追踪,即可生成(其中时间单位都是毫秒) ( 如果从Android studio的tools中打开会导致无法搜索,在sdk 的tools下使用命令行打开,则可以使用搜索功能)
开发者最关心的数据有:
很重要的指标:Calls + Recur Calls / Total,最重要的指标: Cpu Time / Call 因为我们最关心的有两点,一是调用次数不多,但每次调用却需要花费很长时间的函数。这个可以从Cpu Time / Call反映出来。另外一个是那些自身占用时间不长,但调用却非常频繁的函数。这个可以从Calls + Recur Calls / Total反映出来。
使用下来,觉得最后一种方法使用比较方便。如果要分析具体的方法中情况,则点击第一列"Name",按名字排序,找到自己的包名和类名,查看函数执行时间。展开一项后,点击parent可以返回上一级函数,点击children可以查看子函数的情况,跳转非常方便。找到占用时间多的函数后,分析里面哪个子方法占主要时间,最终找到根源,想办法干掉它!
更多 https://yq.aliyun.com/articles/20467