postInvalidate()有什么作用?

时间:2011-04-02 06:27:49

标签: android android-layout invalidation

Android中postInvalidate()功能的用途是什么?我在很多地方都看到过这个功能。当我用Google搜索时,我出来了这么多:

  

postInvalidate-- 在UI线程上发布无效请求

我不知道“无效请求”这句话是什么意思。有人可以详细解释这里发生了什么吗?

3 个答案:

答案 0 :(得分:123)

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

只需比较无效 postInvalidate

答案 1 :(得分:20)

通过此方法(postInvalidate()),您可以使非UI线程中的View无效。要从UI线程使用View方法使invalidate()无效。

失效意味着,View.onDraw(Canvas)方法将在未来的某个时刻(不是立即)调用以重绘整个View(如果View可见)。

Android会自动重新绘制View,但有时需要说明:“嘿,此View已更改,请尽快重绘。”

更多信息:

http://developer.android.com/guide/topics/ui/how-android-draws.html

http://developer.android.com/reference/android/view/View.html#invalidate%28%29

答案 2 :(得分:2)

简单来说,可以从UI线程调用invalidate()方法,并且可以从非UI线程调用postInvalidate(),以告诉android在对其进行一些更改后更新我们的自定义视图