View繪製分三個步驟,順序是:onMeasure,onLayout,onDraw。調用invalidate方法只會執行onDraw方法;調用requestLayout方法只會執行onMeasure方法和onLayout方法,並不會執行onDraw方法。
所以當我們進行View更新時,若僅View的顯示內容發生改變且新顯示內容不影響View的大小、位置,則只需調用invalidate方法;若View寬高、位置發生改變且顯示內容不變,只需調用requestLayout方法;若兩者均發生改變,則需調用兩者,按照View的繪製流程,推薦先調用requestLayout方法再調用invalidate方法。
invalidate和postInvalidate:invalidate方法只能用於UI線程中,在非UI線程中,可直接使用postInvalidate方法,這樣就省去使用handler的煩惱。