時間是很寶貴的東西,在編寫Android代碼的時候盡量的編寫出高效的Android代碼可以節省你很多的時間,讓你有時間去泡妞、去陪女朋友、去陪基友,去吃飯、去文娛、去睡覺!畢竟,誰都不想整夜整夜的加班,然后還亂吼:時間都去哪了?!下面就整理了怎樣提高效力,編寫高效的Android代碼!看到這,偷笑了吧,表粉飾,我已看到!
對如何判斷1個系統的不公道,這里有兩個基本的原則:
1、不要做沒必要要做的事情。
2、盡量的節省內存的使用。
下面是經常使用的幾點優化建議:
1、盡量避免創建對象(Object)
由于對象的創建其實不是沒有代價的,如果你在1個用戶界面的循環中分配1個對象,你不能不強迫的進行內存回收,那末就會使用戶體驗出現略微“打嗝”的現象。
當從原始的輸入數據中提取字符串時,試著從原始字符串返回1個子字符串,而不是創建1份拷貝。
2、使用本身方法(Use Native Methods)
當處理字符串的時候,不要猶豫,盡量多的使用諸如String.indexOf()、String.lastIndexOf()這樣對象本身帶有的方法。由于這些方法使用C/C++來實現的,要比在1個java循環中做一樣的事情快10⑴00倍。
3、使用Safe.ijiami去檢測下你碼完的代碼
Android代碼碼完,開發完Android App,用Safe.ijiami可以檢測出代碼存在的漏洞,1分鐘完事,不耽誤你碼下1批代碼。最重要的是它還會根據你的漏洞提出解決方案,省去你去1個又1個代碼的扒拉!
4、緩沖屬性調用Cache Field Lookups
訪問對象屬性要比訪問本地變量慢很多。你不應當這樣寫你的代碼:
for (int i = 0; i < this.mCount; i++)
dumpItem(this.mItems[i]);
而是應當這樣寫:
int count = this.mCount;
Item[] items = this.mItems;
for (int i = 0; i < count; i++)
dumpItems(items[i]);
(我們直接使用“this”表明這些是它的成員變量)
5、聲明Final常量
我們可以看看下面1個類頂部的聲明:
static int intVal = 42;
static String strVal = “Hello, world!”;
當1個類第1次使用時,編譯器會調用1個類初始化方法,這個方法將42存入變量intVal,并且為strVal在類文件字符串常量表中提取1個援用,當這些值在后面援用時,就會直接屬性調用。
我們可以用關鍵字“final”來改進代碼:
static final int intVal = 42;
static final String strVal = “Hello, world!”;
這個類將不會調用類初始化方法,由于這些常量直接寫入了類文件靜態屬性初始化中,這個初始化直接由虛擬機來處理。代碼訪問intVal將會使用Integer類型的42,訪問strVal將使用相對節省的“字符串常量”來替換1個屬性調用。
將1個類或方法聲明為“final”其實不會帶來任何的履行上的好處,它能夠進行1定的最優化處理。例如,如果編譯器知道1個Get方法不能被子類重載,那末它就把該函數設置成Inline。
6、避免浮點類型的使用
嵌入式的處理器通常其實不支持浮點數的處理,因此所有的“float”和“double”操作都是通過軟件進行的,1些基本的浮點數的操作就需要花費毫秒級的時間。
同理,即便是整數,1些芯片也只有乘法而沒有除法。在這些情況下,整數的除法和取模操作都是通過軟件實現。
7、避免羅列類型Avoid Enums
羅列類型非常好用,當斟酌到尺寸和速度的時候,就會顯得代價很高,例如:
public class Foo {
public enum Shrubbery { GROUND, CRAWLING, HANGING }
}
這會轉變成為1個900字節的class文件(Foo$Shrubbery.class)。第1次使用時,類的初始化要在獨享上面調用方法去描寫羅列的每項,每個對象都要有它本身的靜態空間,全部被貯存在1個數組里面(1個叫做“$VALUE”的靜態數組)。那是1大堆的代碼和數據,而僅僅是為了3個整數值。
Shrubbery shrub = Shrubbery.GROUND;
這會引發1個靜態屬性的調用,如果GROUND是1個靜態的Final變量,編譯器會把它當作1個常數嵌套在代碼里面。