Android:Activity.runOnUiThread和View.post有什么区别?

时间:2012-05-11 20:29:15

标签: android

Activity.runOnUiThreadView.post之间有什么区别,有人可以解释一下吗?

4 个答案:

答案 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,这是ActivityActivity.runOnUiThread在封面下使用的内容。

(为了准确性而编辑,“从另一个帖子中添加”)

答案 3 :(得分:0)

另一个区别:post是每个视图; runOnUiThread是每个活动。

这意味着(将来?)可以进行view.getQueue / activity.getQueue并完全获得您想要的内容,而无需您自己的跟踪或过滤代码。