[Android]性能之traceview使用

Traceview是android平台配备的一个很好的性能分析工具。它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到method。

使用Traceview的版本限制

对于Android 1.5及以下的版本:不支持。

对于Android 1.5以上2.1下(含2.1)的版本:受限支持。trace文件只能生成到SD卡,且必须在程序中加入代码。

对于Android 2.2上(含2.2)的版本:全支持。可以不用SD卡,不用在程序中加代码,直接自己用DDMS就可以进程Traceview。

一、Android 1.5以上2.1下(含2.1)的版本中Traceview的使用

首先,必须在程序当中加入代码,以便生成trace文件,有了这个trace文件我们才可以将其转化为图形。

1.1、启动追踪

使用Debug的以下静态方法方法来启动:

static void startMethodTracing(String traceName)

Start method tracing, specifying the trace log file name.

使用指定trace文件的名字和默认最大容量(8M)的方式开始方法的追踪

static void startMethodTracing()

Start method tracing with default log name and buffer size.

使用默认trace文件的名字(dmtrace.trace)和默认最大容量(8M)的方式开始方法的追踪

static void startMethodTracing(String traceName, int bufferSize, int flags)

Start method tracing, specifying the trace log file name and the buffer size.

使用指定trace文件的名字和最大容量的方式开始方法的追踪。并可指定flags.

注:int flags好像没意义。一般都用0.

static void startMethodTracing(String traceName, int bufferSize)

Start method tracing, specifying the trace log file name and the buffer size.

使用指定trace文件的名字和最大容量的方式开始方法的追踪。

注1:以上的方法的文件都会创建于SD卡下,即"/sdcard/"下,对默认文件名的就是"/sdcard/dmtrace.trace"

如果没SD卡,以上方法会抛异常致使程序crash.

注2:如果文件名没有指定类型,系统为其加上类型.trace

1.2、停止追踪

使用Debug的静态方法方法来停止:

public static void stopMethodTracing ()。

例如在activity的onCreate()中添加Debug.startMethodTracing(), 而在onDestroy()中添加Debug.stopMethodTracing(),

如下:

    @Override

    public void onCreate(Bundle savedInstanceState) {

     Debug.startMethodTracing();

        super.onCreate(savedInstanceState);

     ..............................

     }

protected void onDestroy() {

super.onDestroy();

.................

Debug.stopMethodTracing();

 

}

对于模拟器我们还得创建一个带有SD card的AVD,这样才能使trace文件保存到/sdcard/...当中。

可以在命令中分别单独创建,也可以在创建avd的时候一起将sdcard创建。创建之后通过DDMS file explore我们就可以看到/sdcard/目录下有一个trace文件,如果没有在Debug语句中设置名字则默认为dmtrace.trace.

注意:需要在AndroidManifest.xml文件中添加android.permission.WRITE_EXTERNAL_STORAGE权限。

1.3、 把trace文件从SD卡拷到电脑上

现在我们把这个文件copy到我们的电脑上指定的目录:

adb pull /sdcard/dmtrace.trace d:

1.4、启动traceview可视界面

现在就可以通过命令行来执行traceview了。进入SDK的tools目录后,执行traceview,如下: 

traceview D:\dmtrace.trace.

之后即可以看到图形界面了。

1.5、分析traceview结果

Timeline Panel

窗口的上半部分是时间轴面图(Timeline Panel)

The image below shows a close up of the timeline panel. Each thread’s execution is shown in its own row, with time increasing to the right. 

Each method is shown in another color (colors are reused in a round-robin fashion starting with the methods that have the most inclusive time). 

The thin lines underneath the first row show the extent (entry to exit) of all the calls to the selected method.

界面上方的尺子代表了MethodTracing的时间段(从Debug.startMethodTracing()到Debug.stopMethodTracing()的时间)。

每个线程的函数执行时间图处于和线程名同一行的右侧。

注1:线宽度代表执行该函数本身操作所用的时间

注2:函数所调用的子函数时间线夹杂在该函数本身操作所用的时间线之间。

注3:时间线的高度不知道有什么意义。

注4:函数本身是嵌套的。

注5:每行下面粗的线段标注了Profile Panel中被选中函数调用所消耗的时间段。每个线段对应一次函数的运行。

在下面的图中我们可以看到有11次对LoadListener.nativeFinished()的调用,其中有一次调用耗时特别的多。这里的11次和图2并不一致,应该是google的疏忽。

图1The Traceview Timeline Panel


 

Profile Panel

窗口的下半界面是对各个函数调用的汇总图Profile Panel

  Figure 2 shows the profile pane, a summary of all the time spent in a method. 

The table shows both the inclusive and exclusive times (as well as the percentage of the total time). 

Exclusive time is the time spent in the method. 

Inclusive time is the time spent in the method plus the time spent in any called functions. 

We refer to calling methods as "parents" and called methods as "children." When a method is selected (by clicking on it), 

it expands to show the parents and children. Parents are shown with a purple background and children with a yellow background. 

The last column in the table shows the number of calls to this method plus the number of recursive calls. 

The last column shows the number of calls out of the total number of calls made to that method. 

In this view, we can see that there were 14 calls to LoadListener.nativeFinished(); 

looking at the timeline panel shows that one of those calls took an unusually long time.

图2是对各个函数调用的汇总图Profile Panel。该表给出了the inclusive and exclusive times及他们所占有的百分比。

Exclusive time是该函数本身基本操作不包括子函数调用)的时间。

Inclusive time是该函数调用所用的时间(包括子函数调用)的时间。

列1:"Name"表示函数名。

双击函数名,可以看到在上半界面是时间轴面图(Timeline Panel)看他的所消耗的时间段。(用粗的线段标注)。

双击函数名左边的"+"展开后可以看到,该函数的"parents"和"children"

列2:"incl%"表示函数的Inclusive time整个MethodTracing时间里占的百分比

列3:"Inclusive"表示Inclusive time

列4:"Excl%"表示函数的Exclusive time整个MethodTracing时间里占的百分比

列5:"Exclusive"表示Exclusive time

列6:"Calls+RecurCalls/Total"表示对函数的调用次数包括递归调用)。如图2的nativeFinished()那列为"14+0"表示14次非递归调用,0次递归调用.

列7:新的版本(比如2.1)还有"time/calls"表示平均的调用时间(即Inclusive time/ total calls)。如图3。来自google文档的图2感觉有老了。

:如果函数A调用函数B那么函数A称为函数B的"parents",函数B称为函数A的"children."

图2Profile Panel

图3Profile Panel


 

二、Android 2.2以上(含2.2)的版本中Traceview的简化使用。

Android 2.2除了像2.1当中那样使用Traceview,还可以在DDMS使用Traceview,比以前简化的不少。

* The trace log files are streamed directly to your development machine.

在Android 2.2后可以不用SD卡。Traceview文件流是直接指向开发调试的主机(即DDMS所在的电脑)

To start method profiling:

   1. On the Devices tab, select the process that you want to enable method profiling for.

   2. Click the Start Method Profiling button.

   3. Interact with your application to start the methods that you want to profile.

   4. Click the Stop Method Profiling button. DDMS stops profiling your application and opens Traceview with the method profiling information that was collected between the time you clicked on Start Method Profiling and Stop Method Profiling.

 在DDMS中如何进行Traceview。

 1,在设备表中选中你想进行method trace的进程

 2,单击Method Profiling按钮开始method trace。该按钮在窗口的左上方,它在"stop"按钮的左方,"Device菜单的正下方"。

 3,method trace进行中

 4,单击Method Profiling按钮停止method trace。紧接着系统会自动弹出Traceview窗口来显示刚才的method trace结果。

三、Traceview文件格式

  关于Traceview文件格式请参照http://developer.android.com/guide/developing/debugging/debugging-tracing.html

本文参照来源:

http://wbdban.javaeye.com/blog/564309

http://developer.android.com/guide/developing/debugging/debugging-tracing.html

http://developer.android.com/guide/developing/debugging/ddms.html#profiling

时间: 2024-10-27 08:29:42

[Android]性能之traceview使用的相关文章

Android性能优化案例研究(下)

转自 http://www.importnew.com/4065.html 译者前言:在Android性能优化案例研究(上)中,作者Romain Guy将Falcon Pro这款应用作为例子,通过Android现有的工具追踪和分析了其隐藏的性能问题(重绘).下篇作者将会带来如何解决此类问题的方法和思路. 去掉冗余的图层 为 了去掉重绘我们必须首先理解它从哪里产生的.这就轮到Hierarchy Viewer和Tracer for OpenGL大显身手的时候了.Hierarchy Viewer是AD

ANDROID性能调优

http://www.trinea.cn/android/android-performance-demo/#comment-115 本文主要分享自己在appstore项目中的性能调优点,包括同步改异步.缓存.Layout优化.数据库优化.算法优化.延迟执行等.   性能优化专题已完成五部分: 性能优化总纲--性能问题及性能调优方式性能优化第三篇--Java(Android)代码优化性能优化第二篇--布局优化性能优化第一篇--数据库性能优化 性能优化实例    一.性能瓶颈点 整个页面主要由6个

Android性能优化典范(一)

2015年伊始,Google发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有关性能问题的底层工作原理,同时也介绍了如何通过工具来找出性能问题以及提升性能的建议.主要从三个方面展开,Android的渲染机制,内存与GC,电量优化.下面是对这些问题和建议的总结梳理. 1) Render Performance 大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能.从设计师

Android性能优化典范

2015新年伊始,Google发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App.课程专题不仅仅介绍了Android系统中有关性能问题的底层工作原理,同时也介绍了如何通过工具来找出性能问题以及提升性能的建议.主要从三个方面展开,Android的渲染机制,内存与GC,电量优化.下面是对这些问题和建议的总结梳理. 0)Render Performance 大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能.从设计师

Android性能与优化

I. 编码习惯 尽量避免分配内存(创建对象) 如果一个方法返回一个String,并且这个方法的返回值始终都是被用来append到一个StringBuffer上,就改为传入StringBuffer直接append上去,避免创建一个短生命周期的临时对象: 如果使用的字符串是截取自某一个字符串,就直接从那个字符串上面substring,不要拷贝一份,因为通过substring虽然创建了新的String对象,但是共享了里面的char数组中的char对象,减少了这块对象的创建: 尽量使用多个一维数组,其性

Android群英传笔记——第十章:Android性能优化

Android群英传笔记--第十章:Android性能优化 随着Android应用增多,功能越来越复杂,布局也越来越丰富了,而这些也成为了阻碍一个应用流畅运行,因此,对复杂的功能进行性能优化是创造高质量应用的基础,本章节将为大家展示几种性能优化的方法,帮助开发者快速的构建运行速度快,相应速度快的应用程序 布局优化 内存优化 使用各种工具进行分析,优化 一.布局优化 系统在渲染图片的时候需要消耗大量的资源,一个好的UI,不仅要有良好的视觉体验,更应该具有良好的使用体验,因此布局优化就显得很重要了

android性能优化

前言 性能优化本身是一个很大的主题,涵盖程序的方方面面,任何不慎的操作,都有可能对性能造成比较大的影响,要知道程序的性能是可以累加的,多处的性能低下,会影响整体的性能,其后果可能也是多方面的,本文总结了目前工作中,所需要知道的大部分性能优化点,一部分个人总结,一部分来自于互联网.但整体上,都是提纲性的,并没有列出具体的实例,因为写这方面主题的达人实在太多了,所以,我得站在巨人的肩膀上,具体细节,请参考对应的链接. 性能低下的现象 游戏:界面很卡,FPS低 搜索性能差 服务器响应速度慢 OS:界面

Android性能优化方法_Android

GPU过度绘制  •打开开发者选型,"调试GPU过度绘制",蓝.绿.粉红.红,过度绘制依次加深  •粉红色尽量优化,界面尽量保持蓝绿颜色  •红色肯定是有问题的,不能忍受 使用HierarchyView分析布局层级  •删除多个全屏背景:应用中不可见的背景,将其删除掉  •优化ImageView:对于先绘制了一个背景,然后在其上绘制了图片的,9-patch格式的背景图中间拉伸部分设置为透明的,Android 2D渲染引擎会优化9-patch图中的透明像素.这个简单的修改可以消除头像上的

解析后台进程对Android性能影响的详解_Android

Android现在这么火,各种的设备也是琳琅满目,高中低等,大小屏幕都有,但是它始终未能达到iOS那样的令人称赞的卓越体验和性能,其操作的流畅度,性能和安全性方面总是略输iOS一筹.据说iPhone4虽然是单核512M内存,但是比Android的双核1G内存的操作起来更流畅,iPad2虽然是也只有512M的内存但是操作起来比Android四核1G内存还要流畅.另外在安全性方面也不如iOS. 造成Android性能,待机时间,操作流畅和安全性不好的原因是Android后台进程的管理. Androi