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

use*_*197 22 android invalidation android-layout

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

Dha*_*dra 38

如果您想从中重新绘制视图,invalidate()可以调用postInvalidate()方法.

如果您想从中重新绘制视图,View可以调用postInvalidate方法.

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

点击这里

更新:

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

runOnUiThread(new Runnable() {
    public void run() {
    myImageView.setImageBitmap(image);
    imageView.invalidate();
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 这不正是postInvalidate()的作用吗? (3认同)