1、提升android应用开发性能出色的用户体验有三个特征:速度快、响应及时以及无缝。下面的信息帮助你的应用如何能够在Android上实现这些特征。一、速度快你不能假设手机与桌面系统和服务器一样提速,更多的是你要关注你的代码是否高效。编写高效的Android代码,应遵循两个原则:不要做不必要的事不要分配不必要的内存以下是一些达到此目标的小技巧(有一些技巧是与oo的原则冲突,斟酌使用场景):1、避免建立对象例如,int数组比Integer数组好,同理,这适用于所有基本类型的组合2、使用本地方法不要吝惜使用String.indexOf(),String.lastIndexOf()等特殊实现的方法(sp
2、ecialtymethods)。这些方法都是使用C/C+实现的3、使用实现类比接口好MapmyMap1=newHashMap();HashMapmyMap2=newHashMap();调用一个接口的引用会比调用实体类的引用多花费一倍的时间4、不用getter和setter应该直接访问变量5、将成员变量缓存到本地for(inti=0;ithis.mCount;i+)dumpItem(this.mItemsi);最好改成这样:intcount=this.mCount;Itemitems=this.mItems;for(inti=0;iAndroid-Launch加入-sdcardF:/mysdca
3、rd.img(此步骤就是在第一种创建方式中添加sdcard的支持)备注1:如果sdcard分配的空间太小,则程序追踪文件就一直记录到sd储蓄卡容量慢为止,所以调试前,要为程序生成一个适当的SD存储卡也较为重要,因为程序运行时间越长,这个追踪文件也就越大。备注2;(如果第二种创建方式中的第二部激活出现emulator:ERROR:theuserdataimageisusedbyanotheremulator.aborting,请关闭模拟器,或者进入目录:/DocumentsandSettings/用户/.android/的AVD/*设备*/(比如我的目录是:C:/DocumentsandSett
4、ings/Administrator/.android/avd/android2.0.avd)然后删去以.lock结尾的文件夹就行(我简单解释下为什么要删除这些文件呢,其实.lock是加锁,如果程序崩溃等原因导致无法清除这些以.lock结尾的文件夹,就会出现这个问题,也就是这个avd的锁没有被释放,导致avdmanager以为这个avd正在使用当中。)2.将我们的调试代码嵌入工程正如我们XX到的说明一样,在程序运行的开端加上Debug.startMethodTracing(yourActivityTrace);然后在onPause()中调用Debug.stopMethodTracing();为
5、什么要将结束写在onPause()中而不写在onStop(),那么如果你去看api的话,你会看到,Api中介绍onPause()会在你返回和点击home按键后触发,而onStop()一般是由系统来触发,当该程序处于后台的时候,而且当内存紧张的时候,可能会调用,但是可能永远不会调用到!备注:要记住当把调试代码加入项目中以后不要立即运行项目,而是必须在AndroidMainfest.xml中定义一条写入SD卡的权限那么添加权限的代码如下:因为咱们的调试代码会在SD卡中生成一个追踪文件,也就是往SD卡中写入了数据,所以需要声明一条权限。这里必须注意哦!java:showcolumnsviewplai
6、ncopy1020304050607080901001101201301401501267910111213141516173.运行项目并且退出项目从而得到的追踪文件,利用TraceView来进行分析代码运行状况:打当正常运行了项目并且点击返回或者home按键就会在sdcard中生成一个.trace的文件。sdcard目录在eclipse下,点击:windows-showview-other-android-Fileexplorer右上角的两个箭头,第一个表示从模拟器sdcard导出文件,第二个表示从PC上导入文件到sdcard中、“”代表删除.然后我们通过cmd来运行生成的追踪文件trace
7、viewC:/name追踪文件所在的路径放在C盘,放在C盘以外别的盘的话我这里是无法正常打开traceview的不知道什么原因。name表示生成的.trace文件,cmd的时候不需要输入“.trace”后缀;然后会出现TraceView的分析窗口;【cmd命令!打开cmd并且cd到androidsdktools路径下;(或者在环境变量Path中将sdktool路径配置上,然后重新打开cmd)】注意1:如果出现一下图片这种内存溢出的问题;解决方法:到SDK下的tools下找到traceview.bat文件,鼠标右键-编辑(或者记事本打开),最后一行替换成这样:calljava-Xms128m-X
8、mx512m-Djava.ext.dirs=%javaextdirs%-jar%jarpath%*注意2:如果出现路径不对的问题:例如:我的himi.trace放在了C盘,那么我的cmd命令是:traceviewc:/himi然后回车!但是这里要小心,因为/h这样可能被认为是转义字符!为了避免可以尽可能不要使用h,n,r,t,等等成为名字的头字母,当然还有一种就可以完全避免这种问题,例如还是我的C盘himi.trace文件,可以写cmd命令的时候写成:traceviewc:/himi嘿嘿要注意细节。下面是运行起来的TranceView:最右上角表示运行程序总共用了多少时间,从traceview
9、画面中我们看到有各种颜色,每种颜色代表不同的函数和步骤,那么同一颜色的区域越大,就代表这个步骤运行时间越长,或者看到下面的统计表,明显可以看出除了序列01是系统函数外,2.3.函数占用的时间比较长,那么序列4是个自定义的函数名为“hot”这个占用了几乎与主线程主draw的时间一样了,那么肯定有问题。当然其实这个方法是我故意写的,就是为了来演示traceview。这个hot函数的代码如下:java:showcolumnsviewplaincopy10203040506070809010011012013014015018/*19*authorHimi20*paramcanvas21*/22pub
10、licvoidhot(Canvascanvas)23for(inti=1;i100;i+)24Bitmapbmp=BitmapFactory.decodeResource(getResources(),25R.drawable.icon);26canvas.drawBitmap(bmp,i+=2,i+=2,paint);2728很明显我在故意消耗内存和时间。那么,在traceview的右半部统计字段中:Exclusive:同级函数本身运行的时间Inclusive就是说除统计函数本身运行的时间外再加上调用子函数所运行的时间Name:列出的是所有的调用项,前面的数字是编号,展开可以看到有的有Parent和Children子项,就是指被调用和调用。Incl:inclusive时间占总时间的白分比Excl:执行占总时间的白分比。Calls+RecurCalls/Total
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2