В чем разница между Activity.runOnUiThread
и View.post
, может кто-нибудь объяснить, пожалуйста?
Android: Какая разница между Activity.runOnUiThread и View.post?
Ответ 1
Нет никакой реальной разницы, за исключением того, что View.post
полезно, если у вас нет прямого доступа к этой активности.
В обоих случаях, если не в потоке пользовательского интерфейса, Handler#post(Runnable)
будет вызываться за кулисами.
Как упоминается в комментарии CommonsWare, существует разница между двумя - когда вызывается в потоке Ui, Activity#runOnUiThread
вызывает метод run
напрямую, а View#post
отправит runnable
в очередь ( например, вызовите Handler#post
)
Важным моментом IMO является то, что обе имеют одну и ту же цель, а для тех, кто ее использует, не должно быть разницы (и реализация может измениться в будущем).
Ответ 2
Другая разница между Activity.runOnUiThread и view.post() заключается в том, что runnable в view.post() вызывается после того, как представление прикреплено к окну.
Ответ 3
Либо приемлемы для большинства ситуаций, и по большей части они взаимозаменяемы, но они немного отличаются. Конечно, большая разница состоит в том, что один из них доступен с Activity
, а другой - с View
. Там много совпадений между ними, но иногда в Activity
у вас не будет доступа к View
, а иногда и в View
у вас не будет доступа к Activity
.
Один из краевых случаев, с которыми я столкнулся с View.post
, я упомянул в ответ на другой вопрос SO на View.post
: View.post
работает только с другой поток, когда View
прикреплен к окну. Это редко бывает проблемой, но иногда может привести к тому, что Runnable
никогда не будет выполняться, особенно если вы вызываете View.post
в методе onCreate
вашего Activity
. Альтернативой является использование Handler.post
, который в любом случае используется под обложками Activity.runOnUiThread
и View.post
.
(отредактирован для точности, добавлен "из другого потока" )