`
h416756139
  • 浏览: 365910 次
  • 性别: 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在eclipse 缺少的工具包(hprof-conv.exe,,traceview.bat)

    然而,有时在使用Eclipse进行Android开发时,可能会遇到一些工具包缺失的问题,例如"Android在eclipse 缺少的工具包(hprof-conv.exe, traceview.bat)"。这两个文件是Android SDK中用于调试和性能分析的重要工具。 1...

    traceview.bat丢失

    它是一个命令行工具,用于分析Android应用的Dalvik虚拟机(Dalvik Virtual Machine, DVM)执行时的性能数据,帮助开发者找出代码中的瓶颈,从而提高应用的运行效率。 标题中的“traceview.bat丢失”问题,通常发生...

    android sdk traceview.bat

    在Android应用开发过程中,性能优化是不可或缺的一环,而Traceview工具就是Android SDK提供的一款强大的性能分析器。本文将详细介绍如何使用`traceview.bat`来深入理解并优化Android应用的性能。 **一、什么是Trace...

    traceview测试的源码module

    TraceView是Android系统中一个强大的性能分析工具,主要用于调试应用程序的性能问题,特别是对于CPU密集型的任务和内存使用情况有着详细的追踪能力。它能够提供细粒度的函数调用时间线,帮助开发者找出代码中的瓶颈...

    atrace抓取脚本工具

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

    Android源码分析工具及方法

    在分析Android源码的过程中,一些有效的工具和方法可以极大地提高我们的工作效率,确保我们能够快速准确地定位到我们感兴趣的部分。这里,我们主要介绍两种工具:Eclipse和Android Studio IDE,以及Android SDK ...

    USB Trace 调试工具

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

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

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

    android网络分析工具.rar

    "android网络分析工具.rar" 提供了在Android设备上进行网络抓包、监控网卡状态以及配置网络的强大工具,这对于开发者来说是不可多得的资源。本文将详细介绍其中涉及到的主要工具——`tcpdump` 和 `ethtool`,以及...

    Android代码-安卓开发者工具

    5. Traceview:Traceview是一个图形化的CPU性能分析工具,用于查看和分析应用的Java方法执行时间。它可以帮助开发者找到程序中的性能瓶颈,优化代码执行效率。 6. Memory Profiler:在Android Studio中,内存分析...

    Android离线webview调试工具,开发H5混合应用必备

    使用jh5_debug_view_v2.0.2,开发者可以摆脱网络环境的束缚,专注于代码调试,提升开发效率。对于开发H5混合应用的团队来说,这样的工具无疑是提升开发体验和项目进度的关键。 总结来说,"Android离线webview调试...

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

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

    杨长刚-深入剖析Android系统

    9. **性能优化与调试**:这部分内容可能涉及CPU和内存的优化技巧,如何使用Traceview、Systrace等工具进行性能分析,以及如何调试Android应用。 10. **系统更新与升级**:Android的OTA更新过程、系统升级机制也是书...

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

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

    Android-Android依赖可视化工具

    总之,掌握并利用Android依赖可视化工具是提高开发效率和软件质量的关键。通过清晰地理解项目中的依赖关系,开发者可以更有效地进行代码组织,避免潜在问题,从而打造更加稳定和高效的Android应用。

    tcptrace TCP端口监听工具

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

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

    本篇文章将重点讨论如何通过分析Android系统的trace文件来定位由死锁导致的ANR问题。 当ANR发生时,Android系统会在/data/anr/目录下自动生成一个trace文件,这个文件包含了系统各个线程的状态信息,包括它们当前...

    Android逆向分析权限和API提取工具

    本文将详细介绍“Android逆向分析权限和API提取工具”,这是一个基于Python的小程序,专为安卓逆向工程设计,旨在帮助开发者自动化提取Android应用的权限和API信息。 首先,我们要明白Android权限系统是保护应用...

    android view的旋转

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

    Android基于perfetto分析native内存泄露 Trace

    Android基于perfetto分析native内存泄露 的trace文件及traceconv.exe 原文地址 https://blog.csdn.net/CSqingchen/article/details/128382445

Global site tag (gtag.js) - Google Analytics