2011-04-02 78 views
55

Android中的postInvalidate()函数有什么用?我在很多地方都看到了这个功能。当我用Google搜索,我想出了这么多:postInvalidate()是做什么的?

postInvalidate-- 后的UI线程上的无效请求

我不知道是什么短语“无效请求”有手段。有人能详细解释这里发生了什么吗?

回答

110

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

只是比较无效post验证

+1

谢谢你的答案,我现在明白了。 – rogerstone 2011-04-02 19:07:11

+1

我在你的答案中看到逻辑,但invalidate()也适用于我的非UI类。与postInvalidate()一样好。 – JustBasti 2012-08-13 13:21:20

+1

很好的答案。 Android文档没有解释它的意图是重绘视图。清除它:) – Andy 2012-11-09 22:21:57

19

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

无效意味着我们将在未来的某个时间点(不是立即)调用View.onDraw(Canvas)方法重新绘制整个View(如果View可见)。

Android正在自动重新绘制View s,但有时需要告诉:“嘿,这View已被更改,尽快重绘它。”

更多在:

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

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

+1

非常感谢你 – rogerstone 2011-04-02 19:06:40

1

简单地说,invalidate()方法可以从UI线程调用和postInvalidate()可以从非UI线程为了告诉Android的更新被称为我们的自定义视图经过一些更改后才做出来的。