当前位置: 首页 > 科技观察

Android代码优化技巧总结

时间:2023-03-11 22:41:51 科技观察

前言本文主要介绍优化技巧的一些小细节。当这些tips结合使用时,对整个AndroidApp的性能提升还是有影响的,但不能更大。只有实质性的性能改进。选择正确的算法和数据结构应该是您的首要考虑因素,本文不涉及这方面的内容。您应该将本文中的技巧作为编写代码的习惯,可以提高代码的效率。代码性能优化建议一般来说,高效的代码需要满足以下两条规则:不要做冗余动作如果可以避免,尽量不要分配内存代码执行效果会受到设备CPU、设备内存等诸多因素的影响、系统版本等影响。为了保证代码能够在不同的设备上良好运行,需要最大限度地提高代码的效率。避免创建不必要的对象虽然GC可以回收不用的对象,但是为这些对象分配内存并回收它们也会消耗资源。所以请尽量避免创建不必要的对象,这里有一些例子来说明这个问题:如果您需要返回一个String对象,并且您知道它最终需要连接到一个StringBuffer,请修改您的实现以避免直接连接操作,您应该创建一个临时对象来执行此操作。从输入数据集中提取字符串时,尽量返回原始数据的子字符串对象,而不是创建重复对象。稍微激进一点的做法是将所有多维数据分解为一维数组:一组int数据比一组Integer对象要好得多。可以看出,两组一维数组比一个二维数组效率更高。同样,这个原则可以扩展到其他原始数据类型。如果你需要实现一个数组来存储(Foo,Bar)对象,那么尝试分解成Foo[]和Bar[]比(Foo,Bar)好得多。(当然,一些好的API设计可以做一些妥协。但是在你自己的代码里面,你应该多使用decomposedease。一般来说,你需要避免创建更多的对象。更少的对象意味着更少的GC操作,GC将有对用户体验的影响更直接,选择Static而不是Virtual,如果不需要访问对象的value字段,请保证这个方法是static类型的,这样方法调用会快15倍%-20%.这是一个好习惯,因为你可以从方法声明中看出调用不能改变这个对象的状态。常量声明为StaticFinal先看下面的声明方法staticintintVal=42;staticStringstrVal="Hello,world!";编译器在使用类***的时候会用初始化的方法初始化上面的值,然后访问的时候需要先去它里面找,然后返回数据。我们可以使用staticfinal来提高性能:staticfinalintintVal=42;staticfinalStringstrVal="Hello,world!";这时候就不需要上面的方法做多余的查找动作了。因此,请尽可能将常量声明为staticfinal。避免像C++这样的原生语言内部的Getters/Setters,通常使用getters(i=getCount())而不是直接访问变量(i=mCount)。这是写C++的一个好习惯,也经常被其他面向对象的语言使用,比如C#和Java,由于编译器通常做内联访问,需要限制或调试变量,可以在getter中添加代码/setter在任何时候。但是,在Android上,这是一个坏主意。虚方法调用比直接访问变量更昂贵。那么合理的做法是:在面向对象设计中应该使用getter/setter,但是在类内部应该直接访问变量。如果没有JIT(JustInTimeCompiler),直接访问变量比调用getter快3倍。使用JIT,直接访问变量比通过getter访问快7倍。请注意,如果您使用ProGuard,您可以达到相同的效果,因为ProGuard可以为您内联访问器。使用增强的For循环写法请比较以下三种循环方式:staticclassFoo{intmSplat;}Foo[]mArray=...publicvoidzero(){intsum=0;for(inti=0;i