[Android的invalidate()
和postInvalidate()
方法之间有什么区别?每个人什么时候叫?必须仅在扩展View
的类中调用这些方法吗?
如果要从UI线程重新绘制视图,可以调用invalidate()
方法。
如果要从非UI线程重新绘制视图,则可以调用postInvalidate()
方法。
从View
类派生的每个类都具有invalidate和postInvalidate
方法。如果调用了invalidate,它将告诉系统当前视图已更改,应尽快重绘该视图。由于只能从UI线程调用此方法,因此当您不在UI线程中并且仍想通知系统您的View已更改时,则需要另一个方法。 postInvalidate
方法从非UI线程通知系统,并且视图将尽快在UI线程的下一个事件循环中重绘。 SDK文档中也对此做了简短说明:
UPDATE:
[从其他线程使用postInvalidate时会出现一些问题(例如不立即更新UI),这样会更有效:
runOnUiThread(new Runnable() {
public void run() {
myImageView.setImageBitmap(image);
imageView.invalidate();
}
});