簡體   English   中英

Android:Activity.runOnUiThread 和 View.post 有什么區別?

[英]Android: What's the difference between Activity.runOnUiThread and View.post?

Activity.runOnUiThreadView.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.postView.post的時候才會從另一個線程的工作原理View連接到一個窗口。 這很少有問題,但有時會導致Runnable永遠不會執行,尤其是當您在ActivityonCreate方法中調用View.post時。 另一種方法是使用Handler.post ,這就是Activity.runOnUiThreadView.postView.post使用的內容。

(為准確性進行了編輯,添加了“來自另一個線程”)

另一個區別: post是按視圖進行的; runOnUiThread是每個活動。

這意味着有可能(在未來?)執行view.getQueue / activity.getQueue並獲得您想要的,而無需您自己的跟蹤或過濾代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM