Android代码优化小技巧总结.docx

Android代码优化小技巧总结.docx

ID:59256956

大小:38.56 KB

页数:5页

时间:2020-09-08

Android代码优化小技巧总结.docx_第1页
Android代码优化小技巧总结.docx_第2页
Android代码优化小技巧总结.docx_第3页
Android代码优化小技巧总结.docx_第4页
Android代码优化小技巧总结.docx_第5页
资源描述:

《Android代码优化小技巧总结.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android代码优化小技巧总结前言这篇文章主要是介绍了一些小细节的优化技巧,当这些小技巧综合使用起来的时候,对于整个AndroidApp的性能提升还是有作用的,只是不能较大幅度的提升性能而已。选择合适的算法与数据结构才应该是你首要考虑的因素,在这篇文章中不会涉及这方面。你应该使用这篇文章中的小技巧作为平时写代码的习惯,这样能够提升代码的效率。代码性能优化建议通常来说,高效的代码需要满足下面两个规则:·不要做冗余的动作·如果能避免,尽量不要分配内存代码的执行效果会受到设备CPU,设备内存,系统版本等诸多因素的影

2、响。为了确保代码能够在不同设备上都运行良好,需要最大化代码的效率。避免创建不必要的对象虽然GC可以回收不用的对象,可是为这些对象分配内存,并回收它们同样是需要耗费资源的。因此请尽量避免创建不必要的对象,有下面一些例子来说明这个问题:·如果你需要返回一个String对象,并且你知道它最终会需要连接到一个StringBuffer,请修改你的实现方式,避免直接进行连接操作,应该采用创建一个临时对象来做这个操作.·当从输入的数据集中抽取出Strings的时候,尝试返回原数据的substring对象,而不是创建一个重复的

3、对象。·一个稍微激进点的做法是把所有多维的数据分解成1维的数组:·一组int数据要比一组Integer对象要好很多。可以得知,两组1维数组要比一个2维数组更加的有效率。同样的,这个道理可以推广至其他原始数据类型。·如果你需要实现一个数组用来存放(Foo,Bar)的对象,尝试分解为Foo[]与Bar[]要比(Foo,Bar)好很多。(当然,为了某些好的API的设计,可以适当做一些妥协。但是在自己的代码内部,你应该多多使用分解后的容易。·通常来说,需要避免创建更多的对象。更少的对象意味者更少的GC动作,GC会对用户

4、体验有比较直接的影响。选择Static而不是Virtual如果你不需要访问一个对象的值域,请保证这个方法是static类型的,这样方法调用将快15%-20%。这是一个好的习惯,因为你可以从方法声明中得知调用无法改变这个对象的状态。常量声明为StaticFinal先看下面这种声明的方式1.static int intVal = 42; 2.static String strVal = "Hello, world!"; 编译器会在类首次被使用到的时候,使用初始化方法来初始化上面的值,之后访问的时候会需要先到它那里查

5、找,然后才返回数据。我们可以使用staticfinal来提升性能:1.static final int intVal = 42; 2.static final String strVal = "Hello, world!"; 这时再也不需要上面的那个方法来做多余的查找动作了。所以,请尽可能的为常量声明为staticfinal类型的。避免内部的Getters/Setters像C++等nativelanguage,通常使用getters(i=getCount())而不是直接访问变量(i=mCount).这是编写C+

6、+的一种优秀习惯,而且通常也被其他面向对象的语言所采用,例如C#与Java,因为编译器通常会做inline访问,而且你需要限制或者调试变量,你可以在任何时候在getter/setter里面添加代码。然而,在Android上,这是一个糟糕的写法。Virtualmethod的调用比起直接访问变量要耗费更多。那么合理的做法是:在面向对象的设计当中应该使用getter/setter,但是在类的内部你应该直接访问变量。没有JIT(JustInTimeCompiler)时,直接访问变量的速度是调用getter的3倍。有JI

7、T时,直接访问变量的速度是通过getter访问的7倍。请注意,如果你使用ProGuard,你可以获得同样的效果,因为ProGuard可以为你inlineaccessors.使用增强的For循环写法请比较下面三种循环的方法:1.static class Foo { 2.    int mSplat; 3.} 4. 5.Foo[] mArray = ... 6. 7.public void zero() { 8.    int sum = 0; 9.    for (int i = 0; i < mArray.le

8、ngth; ++i) { 10.        sum += mArray[i].mSplat; 11.    } 12.} 13. 14.public void one() { 15.    int sum = 0; 16.    Foo[] localArray = mArray; 17.    int len = localArray.length; 18. 19.    for

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。