剖析Android Traceview功能工具及二种建SDcard方式

转自
http://android.group.iteye.com/group/wiki/3041-himi-xiaominghimi-traceview-sdcard

趁着爱妻周末不在家,我美丽的过了把作文的瘾,那篇文章前左右后写了近10个小时,其中囊括查资料、初稿、审稿、并更换来网上的时光,但不包含就餐、喝水、上洗手间的年华。作品太长,为减轻您的开卷负担,我会分为五个部分开展摘登。

以下为文章的第二有些。

小说摘录:——为节约您的光阴,阅读上面【230字】的摘要即可了然本文大意:

在教育中,大家太爱用成人的构思形式来预防孩子,在那种教育理念的引导下,大家的深层次意义是:孩子都是坏的,都是从未有过约束能力的,都是索要成人监督才能健康成长的。但事实是国内外出版的恢宏经文的教诲图书都对此有所完全相反的看法,是何许导致了大家这么大的误解?

人类普遍善于挑剔外人却不擅长反思自己,但教育方面我们务必随时反躬自省自己,面对孩子疯狂的玩游戏,除了见到了表面的因素,大家为何不反省一下友好:那么一个净如白纸的子女,为啥来到人世后就被大家带的愈来愈“脏”了吧!

是因为我现在在一家全职做网游的合营社,所以现在内需使用一些办法对现运营的网游代码举行简要和优化,那么快要动用到Android
sdk中提供的一款很好的查实工具—Android
TraceView、下边先交由对此的表达:然后讲解已毕的详尽步骤和亟需更加注意的少数!

/ 02 / 真正的标题出在哪里

在教育中,大家太爱用成人的思索方法来防护孩子,在那种耳提面命理念的率领下,我们的深层次意义是:孩子都是坏的,都是未曾约束能力的,都是要求成人监督才能健康成长的。但事实是国内外出版的大气经典的启蒙图书:《蒙氏教育连串》(蒙特梭利)、《和儿女有效互换连串》(阿黛尔.法伯,伊莱恩.玛兹丽施)、《卡宴女孩序列》(刘卫华)、《自由教育多重》(尹建莉)、《敏感期相关》(孙瑞雪)等等都对此负有完全相反的视角,是什么样导致了俺们那样大的误会?

自我以为最直接的因由是,那是一种最简便易行的教诲视角,不用动脑,什么人都能来。因为它大概狠毒不难推行,而且能够及时见效,但这种方法带来的最大难点是不有所长久性。俺们只可以面对的一个标题是,孩子终有一天会离大家而去,展翅飞翔,但大家却偏偏认定要陪同他们生平,要监视他们生平,以看护他们毕生的见地在考虑着那些及其关键的题材。

俺们常说“要想见见事情的终南山真面目,就要看那件事情给大家的真实性反映,而不是被它的表面所迷惑”。

怎么看到工作的真正面目,就是要掀起孩子给您的反馈,那才是最实在的。而不是自认为那样没错,孩子就活该如此去做,不这么做就是子女的题材。

那你的教诲就是高高在上的,就是站在审美的角度上来约束孩子,而不是为子女服务的;你的率领就是呆板的,就不是因材施教的,就是不另眼看待分化个体之间的反差的。

其原因就在于你不爱也不想思考教育那几个关键的话题,也不敢认可自己错误的,你下意识认为你的辅导理念是完善的,是独一无二且不易的。但当把团结的看法,自己的启蒙成果放之所在,让执行检验的时候,给您的不易反映你又是心有余而力不足收到的,那追根究底应该怨什么人,不就是您自己从没持续的学习,不断的适应孩子的处境吧,反过来却说:那都是孩子的题材,他怎么那么不听话,那么不爱学习…等等,一大堆难点。

俺们太爱把孩子真是自己的私人产物了,也就此就太爱摆布孩子了,就不啻摆布一个玩具一样,当玩物不能按照你的愿望摆出一个造型时,你本来会觉得玩具创制商不精粹,他在骗你的钱,他的事物不佳,什么破玩意儿。但孩子不是这么的,他精神上是不甘于受到摆布的,大家也应该把他当做一个单独的私家。

有利我们的精通,那里给大家补充一个例证:你和好久不见的孩子进行摄像电话,但电话那头的幼子怎么也不愿意和你聊,此时最简易的艺术就是把儿女拖到镜头前和您聊上几句,但那有怎么着用吧!真正的题材是您自己应有反思一下:自己是或不是对男女的涉及不够?外甥是或不是前日正忙着做什么事儿?我应该怎样扩展和孙子的共同话题?…等等。那才是缓解难点的真的办法,前者凶狠不难,立马见效,但只能够是一种表象,弄得咱们都挺别扭。

本人再补充对男女认识的另一个误区:多量的文章都涉及,在游玩面前孩子是不曾自控力的,是管不住自己的,但成人何尝不是,只是没人像监督孩子那么去监督一个成长,有稍许成人痴迷于微信,泡沫剧,各个综艺节目,更毫不说网游了!

本身在大巴上平时见到:一个人在不到10分钟的光阴里,能在5、6个app里来回的跃进,翻看着其中的种种音讯,根本无法静下心来那怕读一段100字的短文,而且这么些进程会一贯不停直至下车并在换乘的路上,难道那不是一种精力的浪费,难道这不是手机对人注意力的一种入侵。

咱俩决不高估了作为成人的能力,也不要低估了作为子女的自制力。

源于人民早报和讯

俺们现在的争辨是,成人过于高估自己的力量,却尚未能力确实的化解子女的标题。就算是全校的导师也只是在传授知识上有自己的一套,在育人上,我不得不说“咦~~”。有多少个教授可以真正的了然子女的心里,又有多少个老师对幼儿心绪学、青年心绪学有商讨,可以传授学问之外的东西,可以从内心深处去精晓子女,做到真正的育人,匡助孩子走好团结的人生之路而不光是学习之路。

人类普遍善于挑剔外人却不擅长反思自己,但教育方面大家务必随时反躬自省自己,面对孩子疯狂的玩游戏,除了见到了表面的元素,大家为啥不反省一下友好:那么一个净如白纸的子女,为何来到人间后就被大家带的愈来愈“脏”了吧!


给大家讲一个自己发觉的一个专门好玩的作业:通过不停的砥砺,那根平日被拔掉的鼻毛会变得尤其粗,越来越黑,毛囊也愈加结实!但如同也越来越没用。那是干吗呢?因为那是一个不算的操练,一个不佳的习惯,所以随后不用随便把鼻毛,要用剪得!O(∩_∩)O哈哈~

怎样是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

  之后就足以观望图片了,接下去就是依据谷歌 Dev
Guide中的解释去分析图形就OK了。

上边来看怎么完毕以及须要专注的地方:

  完成的手续分为三步:1.亟须先在我们的模拟器中开创sdCard
;2.将我们的调剂代码嵌入工程;3.施用TraceView来观望和剖析代码情形;

1.对于开创模拟器的sdCard那里写出两种办法:

先是种:大家在eclipse中开创avd的时候的时候 在接纳api上面有个 Sd Card
的选项,第一项填入创立sdcard的深浅即可。

图片 1

其次种: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.将大家的调试代码嵌入工程

正如我辈百度到的说可瑞康(Karicare)样,在程序运行的开始加上 
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>

因为大家的调剂代码会在microSD卡中生成一个追踪文件,也就是往SDXC卡中写入了多少,所以须要声雅培条权限。那里不可不注意啊!

Java代码
图片 2

  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 

图片 3
右上角的四个箭头,第四个象征从模拟器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:即使出现转手图形那种内存溢出的标题;

图片 4

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

图片 5

最右上角象征运行程序总共用了略微时间,从traceview画面中大家看出有种种颜色,每种颜色代表分歧的函数和步子,那么同样颜色的区域越大,就象征那一个手续运行时刻越长,或者看到上面的总计表,分明可以看来除了系列0 1 是系统函数外,2. 3.函数
占用的年华相比长,那么种类4是个自定义的函数名为
“hot”这几个占据了大约与主线程
主draw的年月一模一样了,那么必然有标题。当然其实这一个法子是自家有意写的,就是为着来演示traceview。那些hot函数的代码如下:

Java代码
图片 6

  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: 调用和另行调用的次数

提姆e/Call: 总的时光。(ms)

之所以traceview是个极度好的顺序监视工具,可以帮忙找出程序运行缓慢时的函数,让我们的代码不断完善和矫正!

发表评论

电子邮件地址不会被公开。 必填项已用*标注