避免“壞”表現(xiàn)
- 避免堵塞主線程
- 避免可能引發(fā)大范圍重繪的不必要的重繪
- 用 RelativeLayout 來減少布局層級
- 避免在 LinearLayout 中使用嵌套的 weight 屬性(因為weight屬性會使每個子View進(jìn)行兩次measure)
- 避免使用沒有恰當(dāng)處理的自定義View
- 避免創(chuàng)建沒必要的對象
- 將常量聲明為 static final(static比普通變量快 15% - 20%)
- 使用基本數(shù)據(jù)類型(Integer、Float 比基本類型慢兩倍)
- 避免內(nèi)部的 getter 和 setter(直接訪問屬性可以快3倍)
- 使用改進(jìn)的循環(huán)語法【譯者注:這里應(yīng)該是指for each循環(huán)】
- 對私有的內(nèi)部類考慮使用包訪問級別代替私有訪問級別
- 謹(jǐn)慎使用native方法
自定義View
- 遵循KISS原則
- 在布局中使用merge標(biāo)簽來作為根標(biāo)簽(避免額外的ViewGroup)
- 使用include標(biāo)簽(便于布局的復(fù)用)
- 避免不必要的布局
- 不要在onDraw中申請內(nèi)存或者做復(fù)雜邏輯
- 去除不必要的invalidate()調(diào)用
- 考慮創(chuàng)建自己的ViewGroup
- 用RecyclerView替代ListView和GridView
避免內(nèi)存抖動
- 不要申請大量不必要的對象內(nèi)存: 1, 不可變對象:String
- 考慮使用對象池并緩存來減少內(nèi)存抖動
- 留心enum類型的開銷(一個指向枚舉類型的引用就要占據(jù)4個字節(jié))
2, 自動裝箱:Integer, Boolean...
避免內(nèi)存泄漏
- 不要在內(nèi)部類里泄漏context實(shí)例
- 不要在activity里泄漏view實(shí)例
- 使用內(nèi)部靜態(tài)類優(yōu)于非靜態(tài)的