2011-05-25 40 views
1

任何人都知道为什么invalidate必须由UI线程调用?为什么invalidate必须由UI线程调用

与在Java Swing中一样,repaint函数可以被非UI线程和UI线程调用。 repaint执行的任务非常类似于invalidate(此方法会尽快调用此组件的paint方法,否则此方法将尽快调用此组件的更新方法。)

+0

我个人认为这个问题“被低估”。我也曾经讨论过这个问题,并且我认为原因是同步的。如果仅从1个线程更新(重绘)UI,则没有理由进行同步。想象一下情景:在thread1中,你检查textView是否与某些字符串“text”相等,如果成功,你将textView改为“text”+“1”。但与此同时,thread2可能会将内容更改为“text2”,并且最终可能会以“text21”结尾,这不是您想要的内容。所以,不需要同步。其他含义? – azizbekian 2016-01-29 13:52:04

回答

1

不,它们不一样。 Swing中还有一个invalidate方法,并且还需要调用者从EDT/Swing/UI线程调用它。

貌似相当于重新绘制Android是postInvalidate

0

当我们调用invalidate从UiThread它告诉应用程序时,主线程进入idle.So当我们调用invalidate重绘视图,它基本上调度当所有其他即时工作完成时再次绘制视图。如果要在不同于UiThread的单独线程中重绘视图,请使用postInvalidate()

相关问题