Androidの稼働効率の問題


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ループ文で
この3つの例を見てみましょう.
 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 , , , 。



, 。