Androidの稼働効率の問題
Androidでは実行速度やパフォーマンスに影響するプログラミング習慣がありますが、ここではいくつか挙げます.
一.内部呼び出しgetメソッドとsetメソッドを回避します.
いくつかのプログラミング言語、例えばC++では、直接値を付けるのではなく、getメソッド(e.g.
二.static finalで定数を定義する
次のclassの冒頭に書いてある例を見てみましょう.
三.拡張版のforループ文で
この3つの例を見てみましょう.
一.内部呼び出し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 , , , 。
, 。