Android学习 - Android优化浅析

来源:互联网 发布:微信淘客软件 编辑:程序博客网 时间:2024/05/21 09:54

Android优化来说有很多方面,比如listView等。但是单纯来说Android本身系统就提供了很多优化,所以这里讲优化其实有点没有必要。总体来说这里所说的优化其实是程序员平时所犯的简单错误,也就是说这里所说的优化是想让程序员拥有一个良好的代码风格,尽量避免因为代码错误而产生的多余消耗。

优化的核心原则

不做不必要的事,不分配不必要的内存

1、字符串频繁操作时,多用StringBuffer而少用String。

2、尽量使用本地变量,即反复使用的变量要先保存成临时或局部变量,尤其是循环中使用的变量。

3、String方法中substring和indexOf都是native方法可以大量的使用。

4、如果函数返回String类型,而且返回后的使用就是要加入到StringBuffer此时可以直接传入StringBuffer。

5、用两个一维数组代替二维数组int[][]=====int[] int[]。

6、如果返回直接类型足够了,就不应返回接口类型如假如返回Hashmap就足够了,请不要返回Map。

7、如果一个方法不访问(不修改)成员变量,请用static方法。

8、尽量不用getters和setters,如果你非要用的话请加上final关键字,编译器会把它当成内联函数。

9、永远不要在for循环第二个参数中使用方法调用。

10、不修改的static变量请用staticfinal常量代替。

11、foreach可以用来处理数组和arraylist,如果处理其他对象相当于Iterator。

12、避免使用枚举,请使用常量代替。

13、慎用浮点数float尤其是大量的数学运算。

14、不使用的引用变量要手动置null,提高内存被回收的几率。

15、慎用图片操作,使用后要立即释放资源。

UI优化使用HierarchyViewer工具

这里会提到为什么使用HierarchyViewer,怎么使用HierarchyViewer,后者内容会多一下。

为什么使用HierarchyViewer

不合理的布局会使我们的应用程序UI性能变慢,HierarchyViewer能够可视化的角度直观地获得UI布局设计结构和各种属性的信息,帮助我们优化布局设计。HierarchyViewer是我们优化程序的工具之一,它是Android自带的非常有用的工具,可以帮助我们更好地检视和设计用户界面(UI),绝对是UI检视的利器。

怎么使用HierarchyViewer

Hierarchy Viewer是随Android SDK发布的工具,位于AndroidSDK/tools/hierarchyviewer.bat(Windows操作系统,mac上显示的为hierarchyviewer),使用起来也是超级简单,通过此工具可以详细的理解当前界面的控件布局以及某个控件的属性(name、id、height等)。

1、连接设备真机或者模拟器(真机可能无法连接,我用的2.3,连接上了,没读到内容);

2、启动你要观察的应用。

3、打开Hierarchyviewer,点击hierarchyviewer文件即可。连接后如下图,这个图是在官方文档获取的。

4、双击最上面的,如下图的<Focused Window>,这个是当前窗口,加载完毕后会显示当前界面层次结构。

5、观察层次结构图,这个图有点大,可以拖动。View Hierarchy窗口显示了Activity的所有View对象,选中某个View还可以查看View的具体信息,最好选择工具中的Show Extras选项。

6、观察单个view,选择单个view后会出现如下图所示图形。这里会看到Measure、Layout、Draw的耗时。

View Hierarcy同时能帮助你识别渲染性能比较低的部分。View节点中带有红色或黄色的点代表速度较慢的View对象。如单步运行应用程序那样,你可以这样来判断某个View速度一直很慢,还是只在某个特定环境下速度才慢。

请注意,低性能并不表示一定有问题,特别像是ViewGroup对象,View的子节点越多,结构越复杂,性能越差。

View Hierarchy窗口还可以帮助你找到性能问题。只要看每个View节点的性能指标(颜色点)就可以,你可以看到测量(布局或绘制)最慢的View对象是哪个,这样你就能快速确定,要优先察看哪个问题。

 

代码优化使用Android lint工具

作为移动应用开发者,我们总希望发布的apk文件越小越好,不希望资源文件没有用到的图片资源也被打包进apk,不希望应用中使用了高于minSdk的api,也不希望AndroidManifest文件存在异常,lint就能解决我们的这些问题。Androidlint是在ADT 16提供的新工具,它是一个代码扫描工具,能够帮助我们识别代码结构存在的问题,主要包括:

1、布局性能(以前是layoutopt工具,可以解决无用布局、嵌套太多、布局太多)

2、未使用到资源

3、不一致的数组大小

4、国际化问题(硬编码)

5、图标的问题(重复的图标,错误的大小)

6、可用性问题(如不指定的文本字段的输入型)

7、manifest文件的错误

Android lint可以解决如上的问题,当然还有更多,具体的可以参考Android LintChecks。Android官方也总结了lint能解决的问题,如下图。

lint是命令工具,它已经完美的集成到了Eclipse中,我们可以方便的使用。通过lint,我们可以检测出每个问题的说明和问题的严重性,根据检测报告可以对程序作出改进。下面介绍下在Eclipse怎么使用lint。

lint的使用可以通过两个途径,Eclipse左上角的打钩的按钮或者选择项目->右键->AndroidTools,如下图所示:


lint工具简单实用,自动化分析,分析完成会给我们分析报告:

分析包括中会包括错误和警告,会给出具体的描述、类别、位置。上图是一个错误的描述,下图给出警告描述。

Android lint是对android开发者很有帮助的一款工具,对于项目打包发布前优化代码、查找没用到的资源、查找错误等非常有帮助。作为开发者是必须掌握的工具之一,如果想了解更多可以参考lint。

游戏开发中的优化策略

绘图优化:

1、脏矩形:每次都重绘整个背景图,其实是非常浪费的,前后两帧的图其实只有很少的一部发生了变化,因此可以只重绘变化的部分。这是一种常用的绘图优化方式,需要注意的是,android用了双缓冲,也就是说,使用脏矩形的时候,需要连续绘制两次才能完成对surface的刷新。

2、卷屏:这是常用的一种方法,缓存整张背景图,抽象出一个可视窗口,仅显示窗口中的内容,窗口的移动方向与sprite相同,与背景运动方向相反。android游戏背景图的分辨率一般与屏幕的相同,这种方法很少会被用到。

引擎优化:

1、流水作业化资源:简单来说,就是整合资源,不用的资源就及时释放,需要用到的资源再加载,类似流水线生产过程。比如,游戏加载过程中,当前关卡(场景、模式等等)使用不到的音乐或者图像资源就全部释放,仅加载需要用的资源;用不到的线程,不要让它休眠,一定要把它干掉;如果有的资源只用得到一部分,那么就拆解开来,仅加载需要的部分。

2、状态转移逻辑:游戏开发前一定要想清楚状态转移,冗余的状态变化将损耗框架的整体性能,对游戏流畅性的影响以及后期修改的成本往往是远远超出预期的。不要怕费力,一定要认真优化状态转移过程。此外,activity之间切换、ui线程和游戏线程之间的切换,都是非常花费时间的,应该尽力避免。

游戏逻辑优化:

1、预处理:尽可能地预处理游戏逻辑中的运算。比如游戏中经常要用到随机数,就应该在游戏开始之前,生成足够的随机数供游戏逻辑调用,千万避免使用系统自身的rand()函数。这种优化方式难度比较大,但是往往是突破瓶颈的最有效手段。

2、算法优化:这个没有什么好多说的,算法功底和经验积累很重要,单干搞不定的,赶快找同事帮忙。

3、语法优化:语法对运行速度也有很大影响,比如for循环,不同的写法,时间开销差别极大。

0 0
原创粉丝点击