invalidate()
Android的和postInvalidate()
方法有什么区别?每个人什么时候被调用?必须只在扩展的类中调用方法View
吗?
问问题
23601 次
1 回答
42
如果你想从 UI 线程重新绘制你的视图,你可以调用invalidate()
方法。
如果你想从非 UI 线程重新绘制你的视图,你可以调用postInvalidate()
method.
从类派生的每个View
类都有无效和postInvalidate
方法。如果 invalidate 被调用,它会告诉系统当前视图已经改变,应该尽快重绘。由于此方法只能从您的 UI 线程中调用,因此当您不在 UI 线程中并且仍想通知系统您的视图已更改时,需要另一种方法。该postInvalidate
方法从非 UI 线程通知系统,并尽快在 UI 线程的下一个事件循环中重绘视图。SDK 文档中也简要说明了这一点:
更新:
从其他线程使用 postInvalidate 时会出现一些问题(比如没有立即更新 UI),这会更有效:
runOnUiThread(new Runnable() {
public void run() {
myImageView.setImageBitmap(image);
imageView.invalidate();
}
});
于 2011-09-29T11:30:43.047 回答