Open a284628487 opened 6 years ago
选择正确的算法和数据结构,是最优的优化方案。其次一些编码习惯,也可以进行纠正。 两个最基本的原则:
避免创建不必要的对象 创建对象实例之后,当对象不再被引用,则会被回收,如果创建大量的对象,则将频繁的触发垃圾回收方法。 垃圾回收的时候,所有线程进行暂停状态,势必影响应用流畅性。
如果某个方法不涉及到访问该对象的属性,则应该把该方法定义成静态方法,这样调用将带来15%-20%的速度提升。
static int intVal = 42;
static String strVal = "Hello, world!";
增强for循环
public void zero() {
int sum = 0;
for (int i = 0; i < mArray.length; ++i) {
sum += mArray[i].mSplat;
}
}
public void one() {
int sum = 0;
int len = mArray.length;
for (int i = 0; i < len; ++i) {
sum += mArray[i].mSplat;
}
}
public void two() {
int sum = 0;
for (Foo a : mArray) {
sum += a.mSplat;
}
}
zero()最慢,每次循环都将获取一次数组长度,one()快一些,tow()最快。
避免直接使用内部类访问外部类成员变量。
库方法的使用,典型的例子就是String.indexOf()及相关的方法,Dalvik将会做一些优化,所以我们如果自己定义方法实现类似的功能,则效率上将有所降低。 同样的,System.arraycopy()方法,相比起手写loop循环copy赋值操作,将带来9位的效率提升。
集合容器类,尽量定义明确的类型,比如调用一个明确了类型的HashMap@map的代价,相比起调用一个非明确类型的Map@map的代价要低。
https://developer.android.com/training/articles/perf-tips