高性能編碼技巧

  • 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)簽
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 翻譯自“Collection View Programming Guide for iOS” 0 關(guān)于iOS集合視...
    lakerszhy閱讀 4,082評(píng)論 1 22
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,853評(píng)論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,347評(píng)論 25 708
  • 又一個(gè)深夜夏黎又失眠了,起身拿起手機(jī)打開司霆的微信,給他發(fā)了條信息:今天累成狗了,晚上和朋友吃了個(gè)飯,發(fā)了半天牢騷...
    小怪獸打大boss閱讀 946評(píng)論 0 1

友情鏈接更多精彩內(nèi)容