任何人都知道为什么invalidate必须由UI线程调用?为什么invalidate必须由UI线程调用
与在Java Swing中一样,repaint
函数可以被非UI线程和UI线程调用。 repaint
执行的任务非常类似于invalidate
(此方法会尽快调用此组件的paint方法,否则此方法将尽快调用此组件的更新方法。)。
任何人都知道为什么invalidate必须由UI线程调用?为什么invalidate必须由UI线程调用
与在Java Swing中一样,repaint
函数可以被非UI线程和UI线程调用。 repaint
执行的任务非常类似于invalidate
(此方法会尽快调用此组件的paint方法,否则此方法将尽快调用此组件的更新方法。)。
不,它们不一样。 Swing中还有一个invalidate方法,并且还需要调用者从EDT/Swing/UI线程调用它。
貌似相当于重新绘制Android是postInvalidate
当我们调用invalidate
从UiThread它告诉应用程序时,主线程进入idle.So当我们调用invalidate
重绘视图,它基本上调度当所有其他即时工作完成时再次绘制视图。如果要在不同于UiThread的单独线程中重绘视图,请使用postInvalidate()
。
我个人认为这个问题“被低估”。我也曾经讨论过这个问题,并且我认为原因是同步的。如果仅从1个线程更新(重绘)UI,则没有理由进行同步。想象一下情景:在thread1中,你检查textView是否与某些字符串“text”相等,如果成功,你将textView改为“text”+“1”。但与此同时,thread2可能会将内容更改为“text2”,并且最终可能会以“text21”结尾,这不是您想要的内容。所以,不需要同步。其他含义? – azizbekian 2016-01-29 13:52:04