Activity.runOnUiThread
和View.post
之间有什么区别,有人可以解释一下吗?
答案 0 :(得分:98)
没有真正的区别,只有当您无法直接访问活动时,View.post
才有用。
在这两种情况下,如果不在UI线程上,将在幕后调用Handler#post(Runnable)
。
正如CommonsWare在评论中提到的那样,两者之间存在差异 - 当在Ui线程上调用时,Activity#runOnUiThread
将直接调用run
方法,而View#post
将发布runnable
{1}}在队列上(例如调用Handler#post
)
IMO的重点是两者都有相同的目标,对于任何使用它的人来说,应该没有区别(并且实施可能在将来发生变化)。
答案 1 :(得分:22)
Activity.runOnUiThread和view.post()之间的另一个区别是视图附加到窗口后调用view.post()中的runnable。
答案 2 :(得分:17)
在大多数情况下都可以接受,并且大多数情况下它们是可以互换的,但它们 略有不同。最大的区别当然是一个可以从Activity
获得,另一个可以从View
获得。这些之间存在很多重叠,但有时在Activity
中,您将无法访问View
,有时在View
中您将无法访问Activity
}。
我在an answer to another SO question on View.post
中提及的View.post
遇到的边缘情况之一:View.post
仅在View
时从另一个线程中起作用 }附加到窗口。这很少是一个问题,但偶尔会导致Runnable
永远不会执行,尤其是当您在View.post
的{{1}}方法中调用onCreate
时。另一种方法是使用Handler.post
,这是Activity
和Activity.runOnUiThread
在封面下使用的内容。
(为了准确性而编辑,“从另一个帖子中添加”)
答案 3 :(得分:0)
另一个区别:post
是每个视图; runOnUiThread
是每个活动。
这意味着(将来?)可以进行view.getQueue
/ activity.getQueue
并完全获得您想要的内容,而无需您自己的跟踪或过滤代码。