2011-05-25 39 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()

相關問題