一、TraceView
TraceView 是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的 hotspot。TraceView 本身只是一个数据分析工具,两种用法如下:
1、开发者在一些关键代码段开始前调用 Android SDK 中 Debug 类的 startMethodTracing 函数,并在关键代码段结束前调用 stopMethodTracing 函数。这两个函数运行过程中将采集运行时间内该应用所有线程(注意,只能是 Java 线程)的函数执行情况,并将采集数据保存到 /mnt/sdcard/ 下的一个文件中。开发者然后需要利用 SDK 中的 TraceView 工具来分析这些数据。
2、借助 Android SDK 中的 DDMS 工具。DDMS 可采集系统中某个正在运行的进程的函数调用信息。对开发者而言,此方法适用于没有目标应用源代码的情况。
DDMS 中 TraceView 使用示意图如下,调试人员可以通过选择 Devices 中的应用后点击 按钮 Start Method Profiling(开启方法分析)和点击
Stop Method Profiling(停止方法分析)
开启方法分析后对应用的目标页面进行测试操作,测试完毕后停止方法分析,界面会跳转到 DDMS 的 trace 分析界面,如下图所示:
TraceView 界面比较复杂,其 UI 划分为上下两个面板,即 Timeline Panel(时间线面板)和 Profile Panel(分析面板)。上图中的上半部分为 Timeline Panel(时间线面板),Timeline Panel 又可细分为左右两个 Pane:
左边 Pane 显示的是测试数据中所采集的线程信息。由图可知,本次测试数据采集了 main 线程,传感器线程和其它系统辅助线程的信息。
另外,开发者可以在时间线 Pane 中移动时间线纵轴。纵轴上边将显示当前时间点中某线程正在执行的函数信息。
上图中的下半部分为 Profile Panel(分析面板),Profile Panel 是 TraceView 的核心界面,其内涵非常丰富。它主要展示了某个线程(先在 Timeline Panel 中选择线程)中各个函数调用的情况,包括 CPU 使用时间、调用次数等信息。而这些信息正是查找 hotspot 的关键依据。所以,对开发者而言,一定要了解 Profile Panel 中各列的含义。下表列出了 Profile Panel 中比较重要的列名及其描述。
二、 Heap 内存监测工具
Android默认情况下分配给一个应用程序的内存大小是固定的,在程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用。导致系统运行变慢或应用程序崩溃,所以,要对应用程序运行过程中的内存使用情况进行测试。
Android tools中的DDMS带有一个很不错的内存监测工具Heap,可以检测一个进程的内存变化,根据这个工具我们大致可以测试某个应用是否存在泄漏的可能。
具体操作如下:
1、打开eclipse,切换到DDMS,并确认Devices视图、Heap视图都是打开的;
2、将手机通过USB链接至电脑,链接时,选择 “USB调试”模式;
3、链接成功后,在DDMS的Devices视图中将会显示手机设备的序列号,以及设备中正在运行的部分进程信息
4、在Devices 中,点击要监控的程序。
5、点击Devices视图界面中最上方一排图标中的“Update Heap”
6、点击Heap视图
7、点击Heap视图中的“Cause GC”按钮;
8、到此为止需检测的进程就可以被监视。如下图:
Heap视图中部有一个Type叫做data object,即数据对象,也就是我们的程序中大量存在的类类型的对象。在data object一行中有一列是“Total Size”,其值就是当前进程中所有Java数据对象的内存总量,一般情况下,这个值的大小决定了是否会有内存泄漏。可以这样判断:
1.进入某应用,不断的操作该应用,同时注意观察data object的Total Size值
2.正常情况下Total Size值都会稳定在一个有限的范围内.
3.反之如果代码中存在没有释放对象引用的情况,则data object的Total Size值在每次GC后不会有明显的回落,随着操作次数的增多Total Size的值会越来越大,直到到达一个上限后导致进程被kill掉。
三、dump View Hierarchy
可以很直观的显示布局的层次关系以及具体控件的属性,也是在DDMS里面开启。