Android Performance Patterns
這篇文章是翻譯自這個網站,主要是提醒一些增進Performance的寫法,看不懂的就貼原文囉~
Patterns to avoid bad performance
- 不要Block Main Thread
- Avoid unnecessary invalidations that may trigger a cascade of invalidations
- 不要巢狀地使用有
layout_weight
的LinearLayout
,因為會導致onMeasure被呼叫很多次 - Custom View不要亂做。編按:改天來分享做Custom View的心得
- 不要 new 沒用的 object
- 要建立
常數
,請使用static final
- 盡量使用基本資料型態(Primitives),例如
int
,float
,char
, ... - 在class內部,少用
setter
&getter
- 善用 Enhanced loops *詳見下面註解
- 善用
Package
,取代 Private Inner Classes - 小心使用
Native Mathod
(是廢話嗎!?)
關於
第9點
,因為使用 Enhanced Loop,通常都是使用iterator
去跑。根據一些 Android 工程師的說法,反而是建議我們不要使用iterator
,用原本的loop + index
還比較省資源且快速
Patterns for Custom views
- KISS(Keep it as Simple as Possible, 個人覺得是廢話)
- 如果Custom View要
inflater layout
,該 XML Resource 的 Root Tag 請使用<merge></merge>
- 善用
include
tag - 盡量在
onDraw
減少new object
或過多的運算
- 小心使用
invalidate()
,減少呼叫的個數。可以的話利用invalidate(Rect)
限制刷新的範圍(一次刷新整個View是很消耗資源低~) - 不仿考慮建立自己的ViewGroup
- 不要再用
ListView
orGridView
,RecyclerView
是你的新歡
Patterns to avoid memory churn
- 減少 new 沒必較的 object,例如
String
,或是AutoBoxing導致的Integer, Boolean - 考慮使用
Object Pool
- 小心使用
emun
。Android 工程師的建議是:不要使用
待續...