`
h416756139
  • 浏览: 359534 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

剖析Android Traceview效率检视工具

阅读更多

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

  关于Traceview的使用

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

  要添加的代码如下:

  Java代码

  // start tracing to "/sdcard/yourActivityTrace.trace"

  Debug.startMethodTracing("yourActivityTrace");

    // ... // stop tracing Debug.stopMethodTracing();

   // start tracing to "/sdcard/yourActivityTrace.trace" Debug.startMethodTracing("yourActivityTrace");

   // ... // stop tracing Debug.stopMethodTracing();

  Google Dev Guide当中说可以在activity的onCreate()中添加Debug.startMethodTracing(), 而在onDestroy()中添加Debug.stopMethodTracing(),但是在实际的测试时发现这种方式其实并不好用,因为通常情况下我们的activity的onDestroy()是由系统决定何时调用的,因此可能等了很长时间都不会得到这个trace文件。因此决定在onStop()中来调用Debug.stopMethodTracing()。这样当我们切换到其它activity或者点击home键的时候onStop()就会被调用,我们也就可以得到完整的trace file。

  在运行程序之前,首先要保证我们的AVD是一个带有SD card的AVD,这样才能使trace文件保存到/sdcard/...当中。运行后可以任意做一些操作,然后点击home键。这是通过DDMS file explore就可以看到/sdcard/目录下有一个trace文件,现在把这个文件copy到电脑上指定的目录,假设是C:\tracefile 目录下。

  可以通过命令行来执行traceview,进入tools目录后,执行

  traceview C:\tracefile\yourActivityTrace.trace

  之后就可以看到图形了,接下来就是按照Google Dev Guide中的解释去分析图形就OK了。

下面来看如何实现以及需要注意的地方:

  实现的步骤分为三步:1.必须先在我们的模拟器中创建sdCard ;2.将我们的调试代码嵌入工程;3.利用TraceView来观察和分析代码情况;

1.对于创建模拟器的sdCard这里写出两种方式:

第一种:我们在eclipse中创建avd的时候的时候 在选择api下面有个 Sd Card 的选项,第一项填入创建sdcard的大小即可。

       111.jpg

 

 

第二种:cmd 命令! 打开cmd 并且cd 到android sdk tool 路径下;(或者在环境变量Path中将sdk tool路径配置上,然后重新打开cmd)

使用 mksdcard -l mycard 1024M F:\mysdcard.img 创建了一个1G的sdcard;

使用 emulator -avd my_android -sdcard F:\mysdcard.img 激活sdcard!

最后在eclipse Preferences-->Android-->Launch加入 -sdcard F:\mysdcard.img (此步骤就是在第一种创建方式中添加sdcard的支持)


备注1:

如果sdcard分配的空间太小,则程序追踪文件就一直记录到sd储蓄卡容量慢为止,所以调试前,要为程序生成一个适当的SD存储卡也较为重要,因为程序运行时间越长,这个追踪文件也就越大。


备注2;

(如果第二种创建方式中的第二部激活出现 emulator: ERROR: the user data image is used by another emulator. aborting,请关闭模拟器,或者进入目录: /Documents and Settings / 用户 / .android /的AVD / *设备* / (比如我的目录是:C:\Documents and Settings\Administrator\.android\avd\android2.0.avd)

然后删去以.lock结尾的文件夹就行(我简单解释下为什么要删除这些文件呢,其实.lock是加锁,如果程序崩溃等原因导致无法清除这些以.lock结尾的文件夹,就会出现这个问题,也就是这个avd的锁没有被释放,导致avd manager以为这个avd正在使用当中。))


2.将我们的调试代码嵌入工程

正如我们百度到的说明一样,在程序运行的开端加上  Debug.startMethodTracing("yourActivityTrace");  然后在onPause()中调用Debug.stopMethodTracing(); 为什么要将结束写在onPause()中而不写在onStop(),那么如果你去看api的话,你会看到,Api中介绍onPause()会在你返回和点击home按键后触发,而onStop()一般是由系统来触发,当该程序处于后台的时候,而且当内存紧张的时候,可能会调用,但是可能永远不会调用到!

备注:要记住当把调试代码加入项目中以后不要立即运行项目,而是必须在AndroidMainfest.xml中定义一条"写入SD卡的权限"那么添加权限的代码如下:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

因为咱们的调试代码会在SD卡中生成一个追踪文件,也就是往SD卡中写入了数据,所以需要声明一条权限。这里必须注意哦!


  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="com.himi"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  7.         <activity android:name=".MainActivity"  
  8.                   android:label="@string/app_name">  
  9.             <intent-filter>  
  10.                 <action android:name="android.intent.action.MAIN" />  
  11.                 <category android:name="android.intent.category.LAUNCHER" />  
  12.             </intent-filter>  
  13.         </activity>  
  14.     </application>  
  15.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>  
  16.     <uses-sdk android:minSdkVersion="4" />  
  17. </manifest>  
复制代码

3.运行项目并且退出项目从而得到的追踪文件,利用TraceView来进行分析代码运行状况:打当正常运行了项目并且点击返回或者home按键就会在 sdcard中生成一个.trace的文件。sdcard 目录 在eclipse下,点击:windows-show view-other-android-File explorer                                    111.jpg 右上角的两个箭头,第一个表示从模拟器sdcard导出文件,第二个表示从PC上导入文件到sdcard中、“—”代表删除 .....然后我们通过cmd来运行生成的追踪文件  traceview C:\name      追踪文件所在的路径放在C盘,放在C盘以外别的盘的话我这里是无法正常打开traceview的不知道什么原因。   name 表示生成的.trace文件,cmd的时候不需要输入“.trace”后缀 ;然后会出现TraceView的分析窗口;cmd 命令! 打开cmd 并且cd 到android sdk tools 路径下;(或者在环境变量Path中将sdk tool路径配置上,然后重新打开cmd)】注意1:如果出现一下图片这种内存溢出的问题;111.jpg 
解决方法:到SDK 下的tools 下 找到  traceview.bat 文件,鼠标右键-编辑(或者记事本打开),最后一行替换成这样:call java -Xms128m -Xmx512m -Djava.ext.dirs=%javaextdirs% -jar %jarpath% %*注意2:如果出现路径不对的问题:例如:我的 himi.trace 放在了C盘,那么我的cmd命令是:   traceview c:\himi   然后回车!但是这里要小心,因为 \h 这样可能被认为是转义字符!!!为了避免可以尽可能不要使用h,n,r,t,等等成为名字的头字母,当然还有一种就可以完全避免这种问题,例如还是我的C盘 himi.trace 文件,可以写cmd命令的时候写成: traceview c://himi   嘿嘿~要注意细节。 下面是运行起来的TranceView: 111.jpg 
最右上角表示运行程序总共用了多少时间,从traceview画面中我们看到有各种颜色,每种颜色代表不同的函数和步骤,那么同一颜色的区域越大,就代表这个步骤运行时间越长,或者看到下面的统计表,明显可以看出除了序列 0 1 是系统函数外,2. 3.函数 占用的时间比较长,那么序列4是个自定义的函数名为 “hot”这个占用了几乎与主线程 主draw的时间一样了,那么肯定有问题。当然其实这个方法是我故意写的,就是为了来演示traceview。这个hot函数的代码如下:
  1. /** 
  2. * @author Himi 
  3. * @param canvas 
  4. */  
  5.     public void hot(Canvas canvas) {  
  6.         for (int i = 1; i < 100; i++) {  
  7.             Bitmap bmp = BitmapFactory.decodeResource(getResources(),  
  8.                     R.drawable.icon);  
  9.             canvas.drawBitmap(bmp, i += 2, i += 2, paint);  
  10.         }  
  11.     }
复制代码

很明显我在故意消耗内存和时间。那么,在traceview的右半部统计字段中:Exclusive: 同级函数本身运行的时间Inclusive 就是说除统计函数本身运行的时间外再加上调用子函数所运行的时间Name:列出的是所有的调用项,前面的数字是编号,展开可以看到有的有Parent 和Children子项,就是指被调用和调用。Incl: inclusive时间占总时间的白分比Excl: 执行占总时间的白分比。Calls+Recur Calls/Total: 调用和重复调用的次数
Time/Call: 总的时间。(ms).所以traceview是个非常好的程序监视工具,可以帮助找出程序运行缓慢时的函数,让我们的代码不断完善和改进!转自:http://www.eoeandroid.com/thread-55190-1-1.html

 

分享到:
评论

相关推荐

    通过Android trace文件分析死锁ANR实例过程

    遇到ANR(Application Not Responding)是比较常见的问题,产生ANR的原因有很多,比如CPU使用过高、事件没有得到及时的响应、死锁等,下面将通过一次因为死锁导致的ANR问题,来说明如何通过trace文件分析ANR问题

    安立OTDR+软件+TraceView5_0

    Anritsu TraceView 5.0是一款专业的SOR文件打开工具,安装后会自动与SOR/TRC/TRL文件建立关联,双击它们后会自动调用本软件进行打开。

    性能测试工具traceview简介

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

    ddms_traceView.zip

    这是一个通过DDMS分析Android的CPU占用过高生成的TraceView文件,希望对使用TraceView有帮助。

    Android分析Bugreport开源工具

    ChkBugReport是一个用于分析android的bugreport的开源工具,它可以把你得到的bugreprot导出成适合阅读的html。导出的html文件包含了根据bugreport数据得出的图表和分析结论,主要包括进程内存占用信息、程序ANR或...

    正确使用Android性能分析工具——TraceView _ bxbxbai_Android开发笔记1

    1. 最简单的方式就是直接打开DDMS,选择一个进程,然后按上面的“Start Method Profiling”按钮,等红色小点变成黑色以后就表示TraceV

    Linux内核中断trace机制log解析工具

    用于将通过cat /sys/kernel/debug/tracing/trace命令获取的log文件,进行解析,和统计,分类:哪一号中断,在哪一号CPU上运行,总共运行时间多久,最大单次处理时间,最小单次处理时间,平均处理时间,相同中断发生...

    android内存分析工具集锦

    主要从5个模块入手: 1 java的GC机制以及Android最大堆内存分配 2 Monitors 3 DDMS/Traceview 4 Mat 5 LeakCanary 6 开发中要注意的点。

    Android日志分析工具-V3.6.4与工具源代码.rar QT C++

    Android日志分析工具-V3.6.4与工具源代码. QT C++ 代码开源。 Android常用开发工具Eclipse和Android Studio本身自带有日志查看工具LogCat,一般性使用基本满足要求。但若长期处于Android的深度开发,会发现自带的...

    Android源码分析工具及方法

    Android源码分析工具及方法,在对 Android 源码进行分析时,如果有得力的工具辅助,会达到事半功倍的效果。本文介绍了一些在分析 Android 源码时使用的一些工具和方法,希望能够帮助到有需要的同学。

    使用traceview和dmtracedump调试Android代码

    使用traceview和dmtracedump调试Android代码   ✿Android程序调试工具  Google为我们提供的代码调试工具的亮点:traceview和dmtracedump。有了这两个工具,我们调试程序分析bug就非常得心应手了。traceview帮助...

    Android 内存泄露 Mat工具分析

    Android 内存泄露 Mat工具分析。非常好的分析工具讲解

    Anritsu TraceView 4.0

    看图软件方便扫描数据分析查看不能修改内容管理

    Android日志分析工具-V3.6.3

    故而开发了此款软件,该软件不仅解决了上述问题,而且还支持对日志文件进行离线分析和导出备份,支持对日志内容的横向过滤和纵向过滤,且可通过ADB工具直连物理设备进行日志的监控和分析,无需依赖开发工具。...

    论文研究-基于Soot的Android应用静态污点分析工具的研究 .pdf

    基于Soot的Android应用静态污点分析工具的研究,孙明剑,辛阳,针对Android应用信息泄露路径检测的问题,为了实现一种基于配置文件的通用的路径检测工具,本文研究了一种基于Soot的Android静态污点分

    OTDR仿真软件TraceView

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

    Android日志分析工具-V3.6.4

    故而开发了此款软件,该软件不仅解决了上述问题,而且还支持对日志文件进行离线分析和导出备份,支持对日志内容的横向过滤和纵向过滤,且可通过ADB工具直连物理设备进行日志的监控和分析,无需依赖开发工具。...

    Android中View(视图)绘制不同状态背景图片

    Android中View(视图)绘制不同状态背景图片原理深入分析Android中View(视图)绘制不同状态背景图片原理深入分析Android中View(视图)绘制不同状态背景图片原理深入分析Android中View(视图)绘制不同状态背景图片原理深入...

    高通Android 分析工具 QView

    非常强大的高通 Android 分析工具 QView

    Android 静态分析实例以及工具

    静态分析是探索Android程序内幕的一种最常见的方法,它与动态调剂双剑合璧,帮助分析人员解决分析时遇到的各种“疑难”问题。 静态分析是指在不运行的情况下,采用词法分析、语法分析等各种技术手段对程序文件进行...

Global site tag (gtag.js) - Google Analytics