Android:Activity.runOnUiThread和View.post有什么区别?
Activity.runOnUiThread
和View.post
什么区别, View.post
有人能解释一下吗?
除了View.post
在没有直接访问活动的情况下有帮助之外,并没有真正的区别。
在这两种情况下,如果不在UI线程上, Handler#post(Runnable)
将在后台调用。
正如CommonsWare在评论中提到的,两者之间存在差异 – 当在Ui线程上调用时, Activity#runOnUiThread
将直接调用run
方法,而View#post
将在队列上发布runnable
(例如,调用Handler#post
)
国际海事组织的重要一点是两者都有相同的目标,无论谁使用它, 应该没有区别 (将来实施可能会改变)。
Activity.runOnUiThread和view.post()之间的另一个区别是view.post()中的runnable在视图附加到一个窗口之后被调用。
要么在大多数情况下都可以接受,大部分情况下它们是可以互换的,但是它们是微妙的不同的。 当然,最大的区别在于,一个可以从一个Activity
,另一个从一个View
。 这些之间有很多重叠,但有时在一个Activity
您将无法访问View
,有时在View
您将无法访问一个Activity
。
我遇到View.post
的边缘情况之一,我在View.post
另一个SO问题的答案中提到,只有当View
连接到一个窗口时,才能从另一个线程 。 这很less是一个问题,但偶尔会导致Runnable
永远不会执行,尤其是在您的Activity
的onCreate
方法中调用View.post
时。 另一种方法是使用Handler.post
,这是Activity.runOnUiThread
和View.post
在封面下使用的方式。
(编辑的准确性,添加“从另一个线程”)