要在其他线程的主线程中运行某些内容,我们称为runOnUiThread()
。问题是,此调用是同步还是异步?
如果我想在主线程中同步运行某些东西,该怎么办?
答案 0 :(得分:2)
您不能“在主线程中异步运行某些内容”,因为这不是异步逻辑的工作方式。为了使某些东西异步,它必须在另一个线程上运行,否则,按照定义,它就不是异步的。
runOnUiThread()
将您传递的Runnable发布到主线程的Handler。然后,它在下一个可用机会时在主线程上运行。
不要在主线程上添加任何繁琐的逻辑。使用runOnUiThread()
可以在异步逻辑中发生某些情况时更新UI元素,例如TextViews或ProgressBars。
答案 1 :(得分:0)
它是异步的。它立即返回,而无需等待您发布完成的任务。
要在主线程中同步运行某些内容:
如果您在主线程中,请运行它。
如果您位于其他线程中。您需要一些同步机制。例如,您可以使用信号量。在后台线程中获取一个信号量,并让您在runOnUiThread中传递的runnable在该信号量运行完成后释放。这样,您的后台线程将等待可运行对象。好吧,在主线程看来,它仍然是异步的。但这在后台线程看来是同步的。