[英]What's the difference between Activity.runOnUiThread(runnable action) and Handler.post()?
[英]Android: What's the difference between Activity.runOnUiThread and View.post?
Activity.runOnUiThread
和View.post
之間有什么區別,有人可以解釋一下嗎?
沒有真正的區別,除了當您無法直接訪問活動時View.post
會很有幫助。
在這兩種情況下,如果不是在 UI 線程上, Handler#post(Runnable)
將在幕后調用。
正如CommonsWare在評論中提到的,兩者是有區別的——在Ui線程上調用時, Activity#runOnUiThread
會直接調用run
方法,而View#post
會將runnable
發布到隊列中(例如調用Handler#post
)
IMO 重要的一點是,兩者都有相同的目標,對於使用它的人來說,應該沒有區別(並且將來可能會更改實現)。
Activity.runOnUiThread 和 view.post() 的另一個區別是 view.post() 中的 runnable 在視圖附加到窗口后被調用。
在大多數情況下它們都是可以接受的,並且在大多數情況下它們是可以互換的,但它們有細微的不同。 最大的區別當然是一個可以從Activity
,另一個可以從View
。 它們之間有很多重疊,但有時在Activity
您將無法訪問View
,有時在View
您將無法訪問Activity
。
一個我所遇到的邊緣情況View.post
我提到的答案,另一個SO問題View.post
: View.post
的時候才會從另一個線程的工作原理View
連接到一個窗口。 這很少有問題,但有時會導致Runnable
永遠不會執行,尤其是當您在Activity
的onCreate
方法中調用View.post
時。 另一種方法是使用Handler.post
,這就是Activity.runOnUiThread
和View.post
在View.post
使用的內容。
(為准確性進行了編輯,添加了“來自另一個線程”)
另一個區別: post
是按視圖進行的; runOnUiThread
是每個活動。
這意味着有可能(在未來?)執行view.getQueue
/ activity.getQueue
並獲得您想要的,而無需您自己的跟蹤或過濾代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.