Android - uiThread块如何执行?

问题描述 投票:1回答:2
doAsync {
    doSomethingAsync()
    uiThread {
        doSomethingUiThread()
    }
}

基于上面的代码。据我所知,doAsync创建了一个线程并在该新线程中执行其块内的代码。此外,uiThread在主UI线程中执行其块代码。但是代码如何在已经存在的线程中执行?我的意思是UI线程已经在执行代码(例如,接收输入事件,创建新活动等),那么代码是如何执行的?它只是停止所有其他UI线程代码,执行自己然后返回到其他代码?或类似的东西?请赐教。

android asynchronous kotlin ui-thread
2个回答
2
投票

我听说RunOnUiThread方法将runnable(kotlin中的{}块)发布到UI线程的handler。然后UI线程将在不忙时执行runnable.run()方法。如你所知,UI必须有一段时间让我们不忙,因为如果没有,它会导致系统显示ANR(应用程序没有响应)消息(甚至当UI线程尝试运行耗时时它会抛出Exceptions(滞后)网络工作:))。

**编辑**这是一个java代码,向您展示runOnUiThread的工作原理。引自this blog (Korean)

@Override
public final void runOnUiThread(Runnable action)
{
    if (Thread.currentThread() !=mUiThread)
    {
        mHandler.post(action);
    }
    else
    {
        action.run();
    }
}

附:我不是kotlin的出口,但我希望我的回答对你有帮助。


2
投票

它在ui线程上向looper发布一条消息,并在runOnUiThread块中传递一个带有代码的Runnable

© www.soinside.com 2019 - 2024. All rights reserved.