`
h416756139
  • 浏览: 367499 次
  • 性别: 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

 

分享到:
评论

相关推荐

    traceview.zip

    在Android开发过程中,性能优化是不可或缺的一环,而`Traceview`工具就是Android SDK提供的一种强大的性能分析工具。本文将详细介绍`Traceview`及其在Android SDK中的应用,以解决"DDMS files not found"的问题。 ...

    TraceView使用技巧.

    如果使用DDMS的搜索功能存在问题,可以通过命令行使用traceview工具。具体操作如下: 1. 打开命令行工具,切换到Android SDK中tools文件夹的位置。 2. 输入命令:traceview E:\你的文件位置,其中E:\你的文件位置是...

    atrace抓取脚本工具

    atrace(Android Trace)是Android系统提供的一种性能分析工具,用于收集系统级的调用堆栈信息,包括CPU、GPU、内存、IO等各方面的活动,帮助开发者深入了解应用的性能瓶颈,优化系统资源的使用。在Android开发中,a...

    Android系统资源实时监控工具

    总之,"Android系统资源实时监控工具"是一款实用的开发辅助工具,它不仅方便开发者实时监控应用的性能,还能进行Monkey测试和启动耗时分析,提高开发效率和应用质量。结合其轻量级的特点,无论是个人开发者还是团队...

    debugging_android.pdf trace32

    - 利用Trace32强大的性能分析工具,如实时监控、代码覆盖分析等功能,评估代码效率并识别瓶颈。 - 优化关键路径,提高应用程序的整体性能。 #### Android平台的特殊考虑 在进行Android平台的嵌入式调试时,还需...

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

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

    USB Trace 调试工具

    USB Trace调试工具是一款专为USB设备开发者和故障排查人员设计的专业工具,它允许用户深入了解USB通信过程,从而更好地理解和诊断USB设备可能出现的问题。USB Trace通过捕获和分析USB总线上的数据传输,提供了详细的...

    PMD--java代码检视工具

    **PMD:Java代码检视工具** PMD是一款强大的开源静态代码分析工具,主要用于Java语言。它的主要功能是对Java源代码进行分析,检测潜在的编程错误、不良习惯和可能的性能问题,从而帮助开发者提高代码质量,降低维护...

    查看android的数据库文件db工具

    总之,SQLiteBrowser是一款强大的Android数据库查看和管理工具,通过它,开发者可以便捷地查看、修改和分析Android应用的SQLite数据库,从而优化应用的数据处理和性能。在实际开发中,掌握这类工具的使用对于提升...

    BookPage-Android自定义View实现翻页效果,并附带实现教程.zip

    仿真书籍翻页效果BookPageView简介:实现了仿真翻页效果,教程完整地描述了翻页原理分析到性能优化的过程教程博客:Android自定义View——从零开始实现书籍翻页效果(一) Android自定义View——从零开始实现书籍...

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

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

    Android日志分析工具--V3.4.2

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

    Android 静态分析实例以及工具

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

    使用Android系统测量软件开发技术.pdf+深入剖析Android开发小应用里的大智慧.pdf

    开发者需要了解如Traceview、Systrace、Profile GPU Rendering等工具,它们可以帮助分析CPU、内存、网络等资源的使用情况。Traceview用于追踪Java代码的执行时间,而Systrace则提供系统级的性能分析,包括图形渲染、...

    Android日志分析工具-V3.6.3

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

    tcptrace TCP端口监听工具

    **TCP端口监听工具——tcptrace** 在IT行业中,网络通信是不可或缺的一部分,而TCP(传输控制协议)作为互联网协议栈中的重要一环,其工作状态直接影响到应用层服务的稳定性和效率。tcptrace是一款强大的TCP端口...

    Android-Lin是一个让AndroidLint更简单的工具

    Lin工具的出现旨在简化Android Lint的使用流程,提高开发效率。它通过集成和封装Android Lint的功能,使得开发者无需深入了解Lint的底层机制,也能方便地运行Lint检查,获取关于代码质量的反馈。这不仅节省了开发者...

    android反编译 图形化工具

    总的来说,"android反编译 图形化工具"是Android开发者和逆向工程师的强大辅助工具,它通过友好的图形界面简化了反编译过程,使得APK的源代码分析更加便捷。同时,了解反编译的基本原理和相关工具,对于深入理解...

    android应用内存监控工具

    内存监控工具能够帮助开发者检测和分析应用的内存使用情况,预防和解决内存泄漏等问题。"Emmagee.apk"可能是一个专用于Android设备的内存监控应用,它允许用户直接在手机上查看和分析内存使用状况。 一、Android...

    android view的旋转

    本文将深入探讨Android View的旋转机制,包括源码分析、旋转方式以及如何在实际应用中实现。 首先,Android中的View旋转主要通过`setRotation()`、`setRotationX()`和`setRotationY()`这三个方法来实现。它们分别...

Global site tag (gtag.js) - Google Analytics