当前位置:操作系统 > 安卓/Android >>

【Android游戏开发之十】(优化处理)详细剖析Android Traceview 效率检视工具!分析

 

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!

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

 

 

•••••••••10••••••••20••••••••30••••••••40••••••••50••••••••60••••••••70••••••••80••••••••90••••••••100•••••••110•••••••120•••••••130•••••••140•••••••150

<?xml version="1.0" encoding="utf-8"?> 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 

      package="com.himi" 

      android:versionCode="1" 

      android:versionName="1.0"> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 

        <activity android:name=".MainActivity" 

                  android:label="@string/app_name"> 

            <intent-filter> 

                <action android:name="android.intent.action.MAIN" /> 

                <category android:name="android.intent.category.LAUNCHER" /> 

            </intent-filter> 

        </activity> 

    </application> 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 

    <uses-sdk android:minSdkVersion="4

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,