Android: Какая разница между Activity.runOnUiThread и View.post?

В чем разница между 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.

(отредактирован для точности, добавлен "из другого потока" )