23

invalidate()Android的和postInvalidate()方法有什么区别?每个人什么时候被调用?必须只在扩展的类中调用方法View吗?

4

1 回答 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 回答