有一些编程习惯,在Android这里会影响到运行速度和性能,在这里我列出来一些。

一。 避免内部调用get和set方法。

在一些编程语言比如C++里,通常会get方法(e.g. i = getCount() ) 来取值而不是直接赋值(i = mCount ),这种习惯对于C++来说是很好的,但是对于Android,这是个很坏的习惯。因为调用这种方法的开销是很大的,对于OOP来说,在公共接口里使用get和set是可以理解的,但是在同一个类里,你应该使用直接赋值,而不是用get方法去赋值。直接赋值比用get方法赋值可以大约快3倍。

二。 用static final来定义常量

看一下下面这个写在一个class开头的例子。

static int intVal = 42;

static String strVal = "Hello, world!";

编译器会生成一个叫<clinit> 的初始化方法,这个方法会在这个类被执行时最先调用,这个方法会把42存到intVal里面,然后又提取一个reference给
类文件字符串表里给strVal用,等一下这些值被调用的时候,他们就会被用reference的位置来查找。
现在我们修改一下,
static final int intVal = 42;

static final String strVal = "Hello, world!";

这样的话,类就不再需要 那个

<clinit>
方法了,因为这些常量已经放在静态常量初始化的文件里了,在调用的时候是直接去调用,而不是去寻找,这样速度就会快很多。

三。 用增强版的for循环语句

看一下这三个例子。

 static class Foo {

int mSplat;

}

Foo[] mArray = ...

public void zero() {

int sum = 0;

for (int i = 0; i < mArray.length; ++i) {

sum += mArray[i].mSplat;

}

}

public void one() {

int sum = 0;

Foo[] localArray = mArray;

int len = localArray.length;



for (int i = 0; i < len; ++i) {

sum += localArray[i].mSplat;

}

}



public void two() {

int sum = 0;

for (Foo a : mArray) {

sum += a.mSplat;

}

}

zero()最慢,因为每次循环都要去找array的长度,开销很大。
one()快一点,因为它把所有变量都放在本地变量里,避免了寻找开销。
two()最快的啦,从jdk1.5开始用的噢。

四。 不要用Enums如果你只有几个int的话

能定义成static final int XXXXX的话就宁肯多定义几个,也不要用enums貌似省了代码而放在一起。

五。 在inner class里用package scope


看这个例子
public class Foo {

private int mValue;

public void run() {

Inner in = new Inner();

mValue = 27;

in.stuff();

}

private void doStuff(int value) {

System.out.println("Value is " + value);

}

private class Inner {

void stuff() {

Foo.this.doStuff(Foo.this.mValue);

}

}

}


这个例子中,关键点是我们从一个Inner class里调用外面类的私有变量,这在语法方面是合法的,也不会报错,但是,对于虚拟机来说,调用别的class的私有

变量是非法的,为了弥补这个不同点,虚拟机会额外生成两个方法


/*package*/ static int Foo.access$100(Foo foo) {

return foo.mValue;

}

/*package*/ static void Foo.access$200(Foo foo, int value) {

foo.doStuff(value);

}

这个inner类会在尝试调用外面私有方法和变量之前调用这两个static方法,这意味这在调用的时候不是直接调用,而是通过其他方法来访问的,这样会增加很多开销。

所以,不要用private如果你的inner class要调用的话,不过这样也会有个问题,就是其他class也可以调用了,所以在做之前,想清楚。


六。 明智的使用float

在Android设备上,Integer的运行速度比float大概快两倍,但是float和double速度没什么差别,只是double的长度比float长2倍,如果空间不是问题的话,

使用float比double好,有些硬件芯片上有integer的乘法,但是没有除法,所以除法是在软件上运行的,这也是需要考虑的问题。



好了,就简单翻译这么多吧。





更多相关文章

  1. android不将apk包编译到系统里的方法
  2. Android、iOS添加子视图方法比较
  3. 对Android 平台下SElinux的理解及遇到过的相关问题解决方法总结
  4. Android同步方法中异步操作获取返回值。
  5. 针对文件转移情况的Android SDK离线安装方法

随机推荐

  1. 让你自己写的Android的Launcher成为系统
  2. Android中measure过程、WRAP_CONTENT详解
  3. 神们自己
  4. android JNI 开发步骤
  5. Android(安卓)Camera 系统框架分析
  6. AIDL使用学习(一):基础使用学习
  7. 【Android基础】讲讲Android的事件分发机
  8. (转)clipRect 介绍
  9. android 机器人
  10. Android系列教程之六:TextView小组件的使