Android runOnUiThread()在同步调用中

时间:2018-12-17 02:12:18

标签: android multithreading

要在其他线程的主线程中运行某些内容,我们称为runOnUiThread()。问题是,此调用是同步还是异步?

如果我想在主线程中同步运行某些东西,该怎么办?

2 个答案:

答案 0 :(得分:2)

您不能“在主线程中异步运行某些内容”,因为这不是异步逻辑的工作方式。为了使某些东西异步,它必须在另一个线程上运行,否则,按照定义,它就不是异步的。

runOnUiThread()将您传递的Runnable发布到主线程的Handler。然后,它在下一个可用机会时在主线程上运行。

不要在主线程上添加任何繁琐的逻辑。使用runOnUiThread()可以在异步逻辑中发生某些情况时更新UI元素,例如TextViews或ProgressBars。

答案 1 :(得分:0)

它是异步的。它立即返回,而无需等待您发布完成的任务。

要在主线程中同步运行某些内容:

如果您在主线程中,请运行它。

如果您位于其他线程中。您需要一些同步机制。例如,您可以使用信号量。在后台线程中获取一个信号量,并让您在runOnUiThread中传递的runnable在该信号量运行完成后释放。这样,您的后台线程将等待可运行对象。好吧,在主线程看来,它仍然是异步的。但这在后台线程看来是同步的。