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的大小即可。
![](http://hi.csdn.net/attachment/201012/29/7211253_1293608205WxFv.png)
第二种: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
![](http://hi.csdn.net/attachment/201012/29/7211253_129360820920T4.png)
右上角的两个箭头,第一个表示从模拟器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:如果出现一下图片这种内存溢出的问题;
![](http://hi.csdn.net/attachment/201101/10/7211253_1294649855RjFU.png)
解决方法:到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:
![](http://hi.csdn.net/attachment/201012/29/7211253_1293608209OYOI.png)
最右上角表示运行程序总共用了多少时间,从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程序运行速度的优化方法 在IT领域,特别是对于从事科学计算、工程模拟等领域的开发者来说,提升程序的运行效率是非常重要的工作之一。本文将基于给定的文件内容,详细介绍如何优化Visual Fortran...
在Android开发过程中,性能优化是不可或缺的一环,而`Traceview`工具就是Android SDK提供的一种强大的性能分析工具。本文将详细介绍`Traceview`及其在Android SDK中的应用,以解决"DDMS files not found"的问题。 ...
TraceView是Android平台上用于分析应用性能的工具,它可以帮助开发者观察应用程序在运行时的行为,包括方法调用的时序和执行耗时。随着Android Studio成为主要的开发环境,TraceView的使用也与之紧密集成。以下是...
在Android游戏开发中,Android Studio是首选的集成开发环境(IDE),它提供了丰富的工具和库来简化开发流程。例如,Android的SurfaceView或GLSurfaceView被广泛用于创建游戏画面,它们允许开发者在主线程之外进行高...
16. **游戏性能监控与分析**:学习如何使用Android的性能分析工具,如Systrace、Traceview等,对游戏进行性能监控和优化。 源代码部分提供了书中示例游戏的完整实现,读者可以通过阅读和运行这些代码,更直观地理解...
在Android平台上进行游戏开发是一项富有挑战性和创新性的任务,它涉及到多个技术和工具的融合。"Android游戏开发从入门到精通"的主题旨在为开发者提供一套全面的学习路径,从基础概念到高级技术,帮助他们掌握创建...
在Android应用开发过程中,性能优化是不可或缺的一环,而DDMS(Dalvik Debug Monitor Service)和TraceView是开发者常用的性能分析工具,尤其在排查CPU利用率过高、内存泄漏等问题时起到重要作用。"ddms_traceView....
在针对Android开机启动速度优化的探讨中,首先需要了解Android的开机启动过程,该过程大致可以划分为以下几个关键阶段: 1. Bootloader阶段:这是Android设备启动的第一个阶段,负责初始化硬件并加载内核到RAM中。...
Android游戏通常基于Java或Kotlin语言编写,第11章将深入讲解这两种语言的基础语法和特性,帮助你理解如何用它们来构建游戏逻辑。Kotlin作为现代的、类型安全的语言,因其简洁的语法和强大的功能,逐渐成为Android...
本文基于Android平台开发了一款解谜游戏,旨在探讨开发过程中的关键技术和设计理念,并分析了游戏的市场潜力和用户需求。通过对Android系统特征的深入研究,结合游戏策划与需求分析,本文详尽地描述了游戏从概念到...
实验1-Android开发环境与第一个Android程序是针对嵌入式应用开发课程的一项实践任务,旨在让学生熟悉Android开发的基础流程和工具。在这个实验中,学生需要完成以下关键知识点的学习和操作: 1. **Android开发环境...
本次实训的目标是让学生深入理解并实践基于Android的游戏开发,结合理论知识,提升实际操作技能。实训的意义在于让学生紧跟互联网发展趋势,尤其是移动互联网和Android平台的广泛应用,掌握Android应用软件开发的...
atrace(Android Trace)是Android系统提供的一种性能分析工具,用于收集系统级的调用堆栈信息,包括CPU、GPU、内存、IO等各方面的活动,帮助开发者深入了解应用的性能瓶颈,优化系统资源的使用。在Android开发中,a...
Android SDK(Software Development Kit)是为开发者提供的一套工具集合,用于创建、测试和调试Android平台上的应用程序。这个文档主要面向使用Java语言进行开发的程序员,包含了Android系统的核心特性、组件、库...
### Android游戏开发知识点详解 #### 一、Android游戏开发概览 Android作为全球最流行的移动操作系统之一,为游戏开发者提供了广阔的市场和发展空间。Android游戏开发不仅涵盖了基础的编程技术,还包括了图形处理、...
本书可能涵盖了如何使用这两种语言进行游戏开发,并介绍了Android Studio集成开发环境的使用,包括项目构建、调试和测试工具。 其次,游戏的核心是图形和音频处理。Android系统提供了OpenGL ES图形库,用于实现2D和...
《Android 2.0游戏开发实战宝典》是一本针对Android平台游戏开发的专业教程,旨在帮助读者通过实际操作,掌握Android 2.0版本下的游戏编程技能。这本书可能涵盖了从基础概念到高级技术的全面内容,包括游戏设计原理...
Android Studio作为Google官方推荐的Android应用程序开发集成开发环境(IDE),其功能强大且不断更新,是每一个Android开发者必备的工具。 本书涵盖了从Android Studio的基础操作到高级特性的全面内容,包括但不...
对于Android游戏而言,了解如何利用这些工具和库来创建游戏画面、处理输入、控制游戏逻辑等,将使开发工作事半功倍。 针对雷霆战机游戏的开发,我们需要根据游戏的需求进行分析,设计合适的软件框架,并在此基础上...
"android开发小游戏源码(能运行,android初学者之宝)"这个项目提供了宝贵的资源,帮助开发者快速理解游戏开发流程。源码的存在使得初学者能够直接查看并分析代码,了解实际应用中的技术细节。 首先,Android开发...