Android的invalidate()和postInvalidate()方法有什么区别?

时间:2011-09-29 11:02:15

标签: android android-layout invalidation

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

1 个答案:

答案 0 :(得分:36)

如果您想从UI Thread重新绘制视图,可以调用invalidate()方法。

如果您想从Non UI Thread重新绘制视图,可以调用postInvalidate()方法。

从View类派生的每个类都有invalidate和postInvalidate方法。如果调用invalidate,它会告诉系统当前视图已更改,并且应该尽快重绘。由于此方法只能从您的UIThread中调用,因此当您不在UIThread中并且仍希望通知系统您的View已被更改时,需要另一种方法。 postInvalidate方法从非UIThread通知系统,并且尽快在UIThread上的下一个eventloop中重新绘制View。它也在SDK文档中简要解释:

CLICK HERE

更新:

从其他线程使用postInvalidate时会出现一些问题(比如没有立即更新UI),这会更有效:

runOnUiThread(new Runnable() {
    public void run() {
    myImageView.setImageBitmap(image);
    imageView.invalidate();
    }
});