Android性能优化工具之TraceView
引子
- TraceView是Android平台特有的数据采集和分析工具,该工具可以通过图形化的方式让我们了解需要跟照片那个程序的性能,可以具体到method,主要用于分析Android中应用程序的Hotspot。该工具本身是一个数据分析工具,那个如何获取数据并分析呢,笔者用之前写的一个demo.apk来进行说明分析。
采集数据
采集数据也就是生成我们需要分析的trace文件,生成该文件有三种方式
- 使用代码
- 使用Android Studio
- 使用DDMS工具
代码方式生成trace文件
使用代码生成traces文件主要利用Android系统的Debug这个api,该类在android.os包下,示例代码如下
//开始 trace,默认保存文件到 "/sdcard/filename.trace"
Debug.startMethodTracing(String fileName);
/*需要分析的代码..*/
Debug.stopMethodTracing();
简单说明一下,当调用开始trace代码的时,系统会产生 trace 文件,并且产生追踪的数据,当调用结束trace代码时,会将追踪的数据写入到 trace文件中。既然文件保存在sdcard根目录,我们可以copy出来,也可以通过adb 将其pull 出来
使用Android studio 生成trace文件
-
使用Android studio 自带的 Android monitor 可以生成trace,如下图所示,当启动debug的应用时,Start Method Tracing 按钮会显示成可点击的状态,
-
点击之后,会开始追踪trace,想要结束trace,再次点击即可,Android studio 会帮你自动打开,如下图所示
从上面可以看到,某一些方法的执行时间,调用次数以及其调用关系,也可以搜索其过滤特定的内容
从左上角可以切换不同的线程,当鼠标悬浮状态置于某个方法块上,可以显示该方法的开始时间结束时间,以及一些时间比例,如下图所示
使用DDMS 生成trace
-
DDMS是 Android 调试监控工具,它为我们提供了截图,查看 log,查看视图层级,查看内存使用等功能,Android Studio 或者eclipse中都集成了该功能,如果你配置了Android环境变量,也可以直接在命令行敲DDMS,该工具在android_sdk\tools下面。
在Devices列表中,选中你的设备和进程,进行trace,再次点击停止trace,停止trace后,DDMS会自动加载trace文件,下面介绍一下面板主要功能,如下图所示。 -
图中主要标记了某些重要的项,用DDMS可以清楚地看到各个线程的执行时间,
-
最后看一下数据分析面板,在数据分析面板,你可以点击某个函数展开更详细的信息,展开后,大多数有以下两个类别:
- Parents:调用该方法的父类方法
- Children:该方法调用的子类方法
- 如果该方法含有递归调用,可能还会多出两个类别:
- Parents while recursive:递归调用时所涉及的父类方法
- Children while recursive:递归调用时所涉及的子类方法
- 至于数据分析面板红色框中,主要字段含义已经标记,点击某个条目可以进行排序
-
主要:很重要的指标:Calls + RecurCalls/Total , 最重要的指标: Cpu Time/Call
因为我们最关心的有两点,一是调用次数不多,但每次调用却需要花费很长时间的函数。这个可以从Cpu Time/Call反映出来。另外一个是那些自身占用时间不长,但调用却非常频繁的函数。这个可以从Calls + RecurCalls/Total反映出来。
结语
- 最后说明一点,实际情况下,分析的难度比较大,但是当体验卡顿的时候,我们可以借助TraceView来定位问题。所以TraceView虽说不常用,但是还是很有意义的!