Android高效代碼注意什么
發(fā)布時間:2019-04-10 11:46:37
瀏覽次數:3905
Android高效代碼注意什么?
1, Avoid Creating Objects
能不使用包裝類就不使用包裝類。
盡量使用 StringBuffer 來處理字符串
盡量使用一維數組代替多維數組
2, Use Native Methods
盡量使用系統(tǒng)提供的接口方法,因為系統(tǒng)提供的接口方法使用 C 編寫的,比自己用 Java 編寫的效率高
3, Prefer Virtual Over Interface
多使用接口的具體實現類。
<1>,Map myMap1 = new HashMap();
<2>,HashMap myMap2 = new HashMap();
兩者比較結果:第一種是一向大家比較推崇的,因為他對以后的維護成本低,但是接口方法的調用比實現類方法的調用更耗時。
4, Prefer Static Over Virtual
多使用靜態(tài)的方法和屬性
5, Avoid Internal Getters/Setters
避免使用 C++ 或 C 形式的 (i=this.getCounter()) 這樣子的代碼
6, Cache Field Lookups
訪問對象的屬性比訪問本地變量花費時間多。
Accessing object fields is much slower than accessing local variables.
Instead of writing:
for (int i = 0; i < this.mCount; i++)
dumpItem(this.mItems[i]);
You should write:
int count = this.mCount;
Item[] items = this.mItems;
for (int i = 0; i < count; i++)
dumpItems(items[i]);
7,Declare Constants Final
聲明一些 final 類型的常量
static int intVal = 42;
static String strVal = "Hello, world!";
可以寫成如下:
static final int intVal = 42;
static final String strVal = "Hello, world!";
8,Use Enhanced For Loop Syntax With Caution
謹慎使用增強的 for 循環(huán),因為它創(chuàng)建多余臨時變量。
public class Foo {
int mSplat;
static Foo mArray[] = new Foo[27];
public static void zero() {
int sum = 0;
for (int i = 0; i < mArray.length; i++) {
sum += mArray[i].mSplat;
}
}
public static void one() {
int sum = 0;
Foo[] localArray = mArray;
int len = localArray.length;
for (int i = 0; i < len; i++) {
sum += localArray[i].mSplat;
}
}
public static void two() {
int sum = 0;
for (Foo a: mArray) {
sum += a.mSplat;
}
}
}
zero() 返回兩次靜態(tài)字段、每次循環(huán)的時候都要請求數組的長度
one() 將所有的屬性存放到本地,避免查找。
two() 使用 jdk1.5 以上版本的增強 for 循環(huán),這是有編譯器拷貝數組的引用和長度到本地這在主循環(huán)體會產生額外的本地裝載和存儲,這跟 one() 相比,比其運行時間長一小點,同時也比 one() 多 4byte 的存儲空間 u
To summarize all that a bit more clearly: enhanced for loop syntax performs well with arrays, but be cautious when using it with Iterable objects since there is additional object creation.
9,Avoid Enums
避免使用枚舉。
10,Use Package Scope with Inner Classes
建議使用內部類
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);
}
}
}
11, Avoid Float
盡量避免使用 float 類型
12, Some Sample Performance Numbers
一些常用操作的占用時間相對比較:
操作 時間
Add a local variable 1
Add a member variable 4
Call String.length() 5
Call empty static native method 5
Call empty static method 12
Call empty virtual method 12.5
Call empty interface method 15
Call Iterator:next() on a HashMap 165
Call put() on a HashMap 600
Inflate 1 View from XML 22,000
Inflate 1 LinearLayout containing 1 TextView 25,000
Inflate 1 LinearLayout containing 6 View objects 100,000
Inflate 1 LinearLayout containing 6 TextView objects 135,000
Launch an empty activity 3,000,000
這些時間相對值,值得我們好好的權衡哦,很有幫助。