Android的invalidate()
和postInvalidate()
方法有什么区别?每个人何时被召唤?必须仅在扩展View
的类中调用方法吗?
答案 0 :(得分:36)
如果您想从UI Thread
重新绘制视图,可以调用invalidate()
方法。
如果您想从Non UI Thread
重新绘制视图,可以调用postInvalidate()
方法。
从View类派生的每个类都有invalidate和postInvalidate方法。如果调用invalidate,它会告诉系统当前视图已更改,并且应该尽快重绘。由于此方法只能从您的UIThread中调用,因此当您不在UIThread中并且仍希望通知系统您的View已被更改时,需要另一种方法。 postInvalidate方法从非UIThread通知系统,并且尽快在UIThread上的下一个eventloop中重新绘制View。它也在SDK文档中简要解释:
更新:
从其他线程使用postInvalidate时会出现一些问题(比如没有立即更新UI),这会更有效:
runOnUiThread(new Runnable() {
public void run() {
myImageView.setImageBitmap(image);
imageView.invalidate();
}
});