- 1、避免創(chuàng)建不必要的對(duì)象
- 1、如果我們又一個(gè)需要拼接的字符串,優(yōu)先考慮StringBuffer或者StringBuilder
- 2、盡量使用基本數(shù)據(jù)類型代替封裝類型,int比integer更加高效
- 3、如果我們明確的知道調(diào)用方法會(huì)將這個(gè)返回的string在進(jìn)行拼接操作的話,可以考慮返回一個(gè)StringBuffer對(duì)象來代替
- 4、基本數(shù)據(jù)類型要優(yōu)于對(duì)象數(shù)據(jù)類型,
我們所要遵循的一個(gè)基本原則就是盡可能的少創(chuàng)建臨時(shí)對(duì)象,越少的對(duì)象意味著越少的GC,同時(shí)也就意味著好的程序性能的體驗(yàn)
- 2、靜態(tài)由于抽象
如果并不需要訪問某一個(gè)對(duì)象中的某些字段,只是想調(diào)用它的某個(gè)方法來完成一項(xiàng)通用的功能,那么可以將這個(gè)方法設(shè)置成靜態(tài)方法,會(huì)讓調(diào)用的速度提升15%-20%,同時(shí)也不用為了調(diào)用這個(gè)方法而去創(chuàng)建對(duì)象了,這樣還滿足了上面的一個(gè)原則。 - 3、對(duì)常量使用static final修飾符
- 4、避免在內(nèi)部調(diào)用Getters Setters方法
在Android上這個(gè)技巧就不在那么受推崇了,因?yàn)樽訌椝褜ひ确椒ㄕ{(diào)用效率高的多,我們直接訪問某個(gè)字段可能要比通過方法來訪問這個(gè)字段快2-7倍,不過我們肯定不能僅僅因?yàn)樾实脑蚓头艞壛诉@個(gè)技巧,編寫代碼還是要按照面象對(duì)象的思維的,但是我們可以在能優(yōu)化的地方進(jìn)行優(yōu)化,比如說避免在內(nèi)部調(diào)用getter/setter方法 - 5、使用增強(qiáng)的For循環(huán)語法
在默認(rèn)情況下,我們應(yīng)該使用增強(qiáng)for,但是在遍歷ArrayList的時(shí)候,我們還是手寫循環(huán)的方式 - 6、考慮包而不是私有的內(nèi)部類訪問
- 7、避免使用浮點(diǎn)數(shù)
- 8、多使用系統(tǒng)封裝好的API
- 9、使用實(shí)現(xiàn)類比接口好
- 10、將成員變量緩存到本地
訪問成員變量要比訪問本地變量慢的多
for(int i = 0;i<this.mCount ; i++) dumpltem(this.mItems[i]);
最好改成以下這樣:
int count = this.mCount; Item[] items = this.mItems; for(int i = 0; i< count ; i++ ) dumpltems(items[i]);
另一個(gè)相似的原則是:永遠(yuǎn)不要在for的第二個(gè)條件中調(diào)用任何方法,
- 在需要時(shí)候加載視圖有時(shí)候你的布局可能需要一些復(fù)雜確很少被用到的視圖,無論他們是item詳情,進(jìn)度指示器,或者撤銷的消息,你都可以在需要的時(shí)候加載這些視圖,來減少內(nèi)存使用量并加快渲染速度,定義一個(gè)ViewStub,ViewStub是一個(gè)沒有尺寸大小并且不會(huì)再布局中嵌套或者渲染任何東西的輕量級(jí)的視圖,因此在視圖層次展現(xiàn)或者隱藏他的代價(jià)非常小,每一個(gè)ViewStub僅僅需要包含android:layout屬性來展現(xiàn)指定的布局
<ViewStub
android:id="@+id/sub_import"
android:inflatedId="@+id/panel_import"
android:layout_gravity="bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
當(dāng)你要載入在ViewStub中定義的布局的時(shí)候,可以calling setVisibility(View.VISIBLE) or call inflate();
ViewStub subimport = (ViewStub) findViewById(R.id.sub_import);
subimport.inflate();
subimport.setVisibility(View.VISIBLE);
* 注意:inflate()方法在視圖渲染完畢后便直接展現(xiàn)該已渲染的視圖View,因此如果你需要和布局交互的話,不需要再調(diào)用findViewById()方法-URL-協(xié)議版本、請(qǐng)求頭、請(qǐng)求正文一個(gè)ViewStub是可見的或者渲染完畢,該元素便不再是視圖層次的一部分,它被已渲染的布局替換,并且該布局的根視圖的ID是在ViewStub中被android:infalteid屬性指定的ID(被android:id指定的ID只有在這個(gè)ViewStub布局是可見/渲染完畢才是有效的)
* 注意:ViewStub的一個(gè)缺點(diǎn)是:目前它在要渲染的布局中并不支持<merge/>標(biāo)簽