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是个非常好的程序监视工具,可以帮助找出程序运行缓慢时的函数,让我们的代码不断完善和改进!
(欢迎大家订阅本博客,因为咱的更新速度可是很快的~娃哈哈)
分享到:
相关推荐
总的来说,TraceView 是一个强大的性能分析工具,它能够提供详细的 CPU 使用情况,帮助开发者深入理解应用的运行过程,从而有效地定位并解决性能问题。在进行 Android 应用开发时,适时使用 TraceView 进行性能调优...
Traceview是Android SDK自带的一个命令行工具,它主要用于分析Java代码的执行性能,帮助开发者找出应用程序中的瓶颈,提高运行效率。通过生成详细的函数调用时间线,Traceview能够显示出每个函数的执行时间以及调用...
在Android开发过程中,性能优化是不可或缺的一环,而`Traceview`工具就是Android SDK提供的一种强大的性能分析工具。本文将详细介绍`Traceview`及其在Android SDK中的应用,以解决"DDMS files not found"的问题。 ...
本篇文章将详细探讨“Android-AndroidStudio快速创建常用工具类的插件”,以及如何利用这个名为Utils_plugin-master的插件来提升开发效率。 首先,理解“工具类”在Android开发中的概念至关重要。工具类通常是一些...
TraceView是Android平台上用于分析应用性能的工具,它可以帮助开发者观察应用程序在运行时的行为,包括方法调用的时序和执行耗时。随着Android Studio成为主要的开发环境,TraceView的使用也与之紧密集成。以下是...
在Android游戏开发中,Android Studio是首选的集成开发环境(IDE),它提供了丰富的工具和库来简化开发流程。例如,Android的SurfaceView或GLSurfaceView被广泛用于创建游戏画面,它们允许开发者在主线程之外进行高...
在Android平台上进行游戏开发是一项富有挑战性和创新性的任务,它涉及到多个技术和工具的融合。"Android游戏开发从入门到精通"的主题旨在为开发者提供一套全面的学习路径,从基础概念到高级技术,帮助他们掌握创建...
通过分析这个"android游戏开发之飞机案例",我们可以学习到Android游戏开发的核心技术和最佳实践,包括UI设计、游戏逻辑、对象模型以及性能优化等多个方面。这不仅对于初学者,对经验丰富的开发者来说也是一个有价值...
Android游戏通常基于Java或Kotlin语言编写,第11章将深入讲解这两种语言的基础语法和特性,帮助你理解如何用它们来构建游戏逻辑。Kotlin作为现代的、类型安全的语言,因其简洁的语法和强大的功能,逐渐成为Android...
7. **游戏性能分析与调试**:源码也可能包含了一些性能优化的痕迹,比如使用TraceView进行性能分析,或者添加了Logcat日志以帮助调试。 8. **游戏测试**:通过源码,我们可以看到开发者是如何进行单元测试、集成...
本次实训的目标是让学生深入理解并实践基于Android的游戏开发,结合理论知识,提升实际操作技能。实训的意义在于让学生紧跟互联网发展趋势,尤其是移动互联网和Android平台的广泛应用,掌握Android应用软件开发的...
### Android游戏开发知识点详解 #### 一、Android游戏开发概览 Android作为全球最流行的移动操作系统之一,为游戏开发者提供了广阔的市场和发展空间。Android游戏开发不仅涵盖了基础的编程技术,还包括了图形处理、...
"Android-Android开发辅助工具fpstopActivityactivity启动耗时电量cpu内存分析"是一个专为开发者设计的工具,它可以帮助开发者监测和分析应用程序的运行状态,以便找出可能存在的性能瓶颈,提高用户体验。这个工具...
《Android 2.0游戏开发实战宝典》是一本针对Android平台游戏开发的专业教程,旨在帮助读者通过实际操作,掌握Android 2.0版本下的游戏编程技能。这本书可能涵盖了从基础概念到高级技术的全面内容,包括游戏设计原理...
【标题】"基于Android的3D游戏开发——国际象棋.zip"揭示了这个项目的核心内容是使用Android平台进行3D游戏的开发,具体是国际象棋这款游戏。这涉及到多个技术领域,包括移动游戏开发、3D图形编程以及网络通信。 在...
这两本PDF文献,"使用Android系统测量软件开发技术.pdf"和"深入剖析Android开发小应用里的大智慧.pdf",无疑是深入理解Android开发的重要资源。 首先,让我们探讨“使用Android系统测量软件开发技术”。Android系统...
这本书提供了对Android系统源代码的详尽解析,帮助读者理解Android的工作原理,提升开发效率和优化能力。 在Android系统中,核心组件包括Linux内核、HAL(硬件抽象层)、运行时库、系统服务、框架API和用户界面。...
- **性能分析工具**:包括内存监视器、CPU剖析器等,帮助定位并优化性能问题。 - **版本控制集成**:与Git等版本控制系统无缝集成,方便团队协作开发。 3. **3.5版本的改进** - **更快的启动和构建速度**:3.5...
在Android游戏中,开发者通常会使用Java或Kotlin作为主要编程语言,因为这两种语言都得到了Google的官方支持,并且拥有丰富的库和工具。本书可能详细介绍了如何设置开发环境,包括安装Android Studio,这是目前最...
源代码讲解部分,可能涉及到如何处理碰撞检测、优化游戏性能,以及如何利用Android的生命周期管理来防止内存泄漏。碰撞检测通常使用简单的几何算法,检查蛇头是否与边界或自身身体相交。优化方面,可以考虑减少不必...