`
xiaominghimi
  • 浏览: 54016 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

【Android游戏开发之十】(优化处理)详细剖析Android Traceview 效率检视工具!分析程序运行速度!并讲解两种创建SDcard方式!

阅读更多

Himi 原创, 欢迎转载,转载请在明显处注明! 谢谢。

原文地址:http://blog.csdn.net/xiaominghimi/archive/2010/12/29/6105212.aspx

由于本人现在在一家专职做网游的公司,所以现在需要使用一些方法对现运营的网游代码进行精简和优化,那么就要使用到Android sdk中提供的一款很好的检视工具—Android TraceView、下面先给出对此的解释:然后讲解实现的详细步骤和需要特别注意的一点!

什么是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的大小即可。

第二种: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!

最后在eclipsePreferences-->Android-->Launch加入-sdcardF:\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卡中写入了数据,所以需要声明一条权限。这里必须注意哦!



3.运行项目并且退出项目从而得到的追踪文件,利用TraceView来进行分析代码运行状况:

打当正常运行了项目并且点击返回或者home按键就会在 sdcard中生成一个.trace的文件。sdcard 目录 在eclipse下,点击:

windows-show view-other-android-File explorer

右上角的两个箭头,第一个表示从模拟器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:如果出现一下图片这种内存溢出的问题;

解决方法:到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:

最右上角表示运行程序总共用了多少时间,从traceview画面中我们看到有各种颜色,每种颜色代表不同的函数和步骤,那么同一颜色的区域越大,就代表这个步骤运行时间越长,或者看到下面的统计表,明显可以看出除了序列 0 1 是系统函数外,2. 3.函数 占用的时间比较长,那么序列4是个自定义的函数名为 “hot”这个占用了几乎与主线程 主draw的时间一样了,那么肯定有问题。当然其实这个方法是我故意写的,就是为了来演示traceview。这个hot函数的代码如下:

很明显我在故意消耗内存和时间。

那么,在traceview的右半部统计字段中:

Exclusive: 同级函数本身运行的时间

Inclusive 就是说除统计函数本身运行的时间外再加上调用子函数所运行的时间

Name:列出的是所有的调用项,前面的数字是编号,展开可以看到有的有Parent 和Children子项,就是指被调用和调用。

Incl: inclusive时间占总时间的白分比

Excl: 执行占总时间的白分比。

Calls+Recur Calls/Total: 调用和重复调用的次数

Time/Call: 总的时间。(ms)


所以traceview是个非常好的程序监视工具,可以帮助找出程序运行缓慢时的函数,让我们的代码不断完善和改进!

(欢迎大家订阅本博客,因为咱的更新速度可是很快的~娃哈哈)


分享到:
评论

相关推荐

    VisualFortran程序运行速度的优化方法

    ### VisualFortran程序运行速度的优化方法 在IT领域,特别是对于从事科学计算、工程模拟等领域的开发者来说,提升程序的运行效率是非常重要的工作之一。本文将基于给定的文件内容,详细介绍如何优化Visual Fortran...

    traceview.zip

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

    精通Android游戏开发

    ### 精通Android游戏开发知识点总结 #### 1. 欢迎进入Android游戏世界 ##### 1.1 必备技能 - **扎实的Android基础**:掌握Android SDK的使用、熟悉Android应用程序的基本结构及其生命周期管理。这部分内容包括...

    ddms_traceView.zip

    在Android应用开发过程中,性能优化是不可或缺的一环,而DDMS(Dalvik Debug Monitor Service)和TraceView是开发者常用的性能分析工具,尤其在排查CPU利用率过高、内存泄漏等问题时起到重要作用。"ddms_traceView....

    android游戏开发毕业论文

    本文基于Android平台开发了一款解谜游戏,旨在探讨开发过程中的关键技术和设计理念,并分析了游戏的市场潜力和用户需求。通过对Android系统特征的深入研究,结合游戏策划与需求分析,本文详尽地描述了游戏从概念到...

    实验1-Android开发环境与第一个Android程序.doc

    实验1-Android开发环境与第一个Android程序是针对嵌入式应用开发课程的一项实践任务,旨在让学生熟悉Android开发的基础流程和工具。在这个实验中,学生需要完成以下关键知识点的学习和操作: 1. **Android开发环境...

    cocos2dx android 游戏开发 引擎 分析

    在Android游戏开发中,Cocos2d-x引擎扮演着至关重要的角色,它提供了一系列的工具和技术,帮助开发者创建高质量的2D和3D游戏。 一、Cocos2d-x引擎概述: Cocos2d-x基于C++,同时提供了Python、Lua等语言的绑定,...

    Android底层开发技术实战详解_android底层_

    《Android底层开发技术实战详解》是一本面向Android底层开发者的专业书籍,旨在深入解析Android系统的内核层次结构、驱动程序开发、性能优化等关键领域的知识。本书内容丰富,覆盖了从硬件接口到软件实现的各个层面...

    android性能分析工具

    - **Traceview**:针对Java层的性能分析工具,可以追踪单个方法的执行时间,帮助找出耗时操作。 - **DDMS**(Dalvik Debug Monitor Service):包含了内存分析、线程检查、CPU使用率监控等功能,适用于调试阶段。 ...

    Android实训报告基于Android游戏开发.docx

    本次实训的目标是让学生深入理解并实践基于Android的游戏开发,结合理论知识,提升实际操作技能。实训的意义在于让学生紧跟互联网发展趋势,尤其是移动互联网和Android平台的广泛应用,掌握Android应用软件开发的...

    Android游戏开发大全.rar

    这份"Android游戏开发大全"压缩包中的PDF教程很可能详细讲解了以上所有知识点,并通过配套的源代码实例进一步加深理解。对于初学者来说,这是一个很好的起点;对于有经验的开发者来说,也是一个不错的参考资料,可以...

    android高级游戏开发及源码

    本书可能涵盖了如何使用这两种语言进行游戏开发,并介绍了Android Studio集成开发环境的使用,包括项目构建、调试和测试工具。 其次,游戏的核心是图形和音频处理。Android系统提供了OpenGL ES图形库,用于实现2D和...

    Android-Android开发辅助工具fpstopActivityactivity启动耗时电量cpu内存分析

    "Android-Android开发辅助工具fpstopActivityactivity启动耗时电量cpu内存分析"是一个专为开发者设计的工具,它可以帮助开发者监测和分析应用程序的运行状态,以便找出可能存在的性能瓶颈,提高用户体验。这个工具...

    android 2.0游戏开发实战宝典

    《Android 2.0游戏开发实战宝典》是一本针对Android平台游戏开发的专业教程,旨在帮助读者通过实际操作,掌握Android 2.0版本下的游戏编程技能。这本书可能涵盖了从基础概念到高级技术的全面内容,包括游戏设计原理...

    安立OTDR+软件+TraceView5_0

    综上所述,Anritsu TraceView 5.0 是一款专业的OTDR数据分析工具,它为光通信行业的工程师提供了高效、准确的数据处理手段,对于保障光纤网络的正常运行和优化具有重要作用。通过使用该软件,用户可以更好地理解和...

    AndroidStudio实战快速高效地构建Android应用 AndroidStudio 高清完整带目录书签 PDF AndroidStudio实战

    Android Studio作为Google官方推荐的Android应用程序开发集成开发环境(IDE),其功能强大且不断更新,是每一个Android开发者必备的工具。 本书涵盖了从Android Studio的基础操作到高级特性的全面内容,包括但不...

    Android手机游戏开发源代码 Java 雷霆战机

    对于Android游戏而言,了解如何利用这些工具和库来创建游戏画面、处理输入、控制游戏逻辑等,将使开发工作事半功倍。 针对雷霆战机游戏的开发,我们需要根据游戏的需求进行分析,设计合适的软件框架,并在此基础上...

    android开发小游戏源码(能运行,android初学者之宝)

    "android开发小游戏源码(能运行,android初学者之宝)"这个项目提供了宝贵的资源,帮助开发者快速理解游戏开发流程。源码的存在使得初学者能够直接查看并分析代码,了解实际应用中的技术细节。 首先,Android开发...

    Google Android核心分析.pdf 一些android开发技巧.doc

    3. **进程与线程管理**:讲解了Android系统如何调度和管理应用程序的进程和线程,以及如何通过合理的进程和线程设计来提升应用的效率和响应速度。 4. **Android资源管理**:包括资源的加载、解析和复用,这对于优化...

    Android MAT 内存分析 工具

    MAT(Memory Analyzer Tool)是由Eclipse基金会开发的一款强大的Java堆内存分析工具,虽然在Android Studio中内置了内存分析功能,但若需要更深入的内存泄漏检测和性能优化,MAT提供了更为专业的解决方案。MAT工具...

Global site tag (gtag.js) - Google Analytics