現(xiàn)在的app到處都充斥著華麗的動(dòng)畫、復(fù)雜的轉(zhuǎn)化還有自定義View,然而用戶體驗(yàn)必須盡可能直觀且類似。以下這些范例將會(huì)幫助你做出一個(gè)流暢的、快速響應(yīng)的、甚至可能減少電量損耗的app,這些范例由一些可以提升整體應(yīng)用表現(xiàn)的微優(yōu)化組成。 

避免“壞”表現(xiàn) 
  • 避免堵塞主線程
  • 避免可能引發(fā)大范圍重繪的不必要的重繪
  • 用 RelativeLayout 來(lái)減少布局層級(jí)
  • 避免在 LinearLayout 中使用嵌套的 weight 屬性(因?yàn)閣eight屬性會(huì)使每個(gè)子View進(jìn)行兩次measure)
  • 避免使用沒(méi)有恰當(dāng)處理的自定義View
  • 避免創(chuàng)建沒(méi)必要的對(duì)象
  • 將常量聲明為 static final(static比普通變量快 15% - 20%)
  • 使用基本數(shù)據(jù)類型(Integer、Float 比基本類型慢兩倍)
  • 避免內(nèi)部的 getter 和 setter(直接訪問(wèn)屬性可以快3倍)
  • 使用改進(jìn)的循環(huán)語(yǔ)法【譯者注:這里應(yīng)該是指for each循環(huán)】
  • 對(duì)私有的內(nèi)部類考慮使用包訪問(wèn)級(jí)別代替私有訪問(wèn)級(jí)別
  • 謹(jǐn)慎使用native方法

自定義View 
  • 遵循KISS原則
  • 在布局中使用merge標(biāo)簽來(lái)作為根標(biāo)簽(避免額外的ViewGroup)
  • 使用include標(biāo)簽(便于布局的復(fù)用)
  • 避免不必要的布局
  • 不要在onDraw中申請(qǐng)內(nèi)存或者做復(fù)雜邏輯
  • 去除不必要的invalidate()調(diào)用
  • 考慮創(chuàng)建自己的ViewGroup
  • 用RecyclerView替代ListView和GridView

避免內(nèi)存抖動(dòng) 
  • 不要申請(qǐng)大量不必要的對(duì)象內(nèi)存:
  •    1, 不可變對(duì)象:String 
       2, 自動(dòng)裝箱:Integer, Boolean...
  • 考慮使用對(duì)象池并緩存來(lái)減少內(nèi)存抖動(dòng)
  • 留心enum類型的開銷(一個(gè)指向枚舉類型的引用就要占據(jù)4個(gè)字節(jié))

避免內(nèi)存泄漏