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

问题描述 投票:22回答:1

[Android的invalidate()postInvalidate()方法之间有什么区别?每个人什么时候叫?必须仅在扩展View的类中调用这些方法吗?

android android-layout invalidation
1个回答
38
投票

如果要从UI线程重新绘制视图,可以调用invalidate()方法。

如果要从非UI线程重新绘制视图,则可以调用postInvalidate()方法。

View类派生的每个类都具有invalidate和postInvalidate方法。如果调用了invalidate,它将告诉系统当前视图已更改,应尽快重绘该视图。由于只能从UI线程调用此方法,因此当您不在UI线程中并且仍想通知系统您的View已更改时,则需要另一个方法。 postInvalidate方法从非UI线程通知系统,并且视图将尽快在UI线程的下一个事件循环中重绘。 SDK文档中也对此做了简短说明:

CLICK HERE

UPDATE:

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

runOnUiThread(new Runnable() {
    public void run() {
    myImageView.setImageBitmap(image);
    imageView.invalidate();
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.