Android - uiThread 块如何执行?
Android - How does uiThread block executes?
doAsync {
doSomethingAsync()
uiThread {
doSomethingUiThread()
}
}
基于上面的代码。我知道 doAsync
创建一个线程并在该新线程中执行其块内的代码。此外,uiThread
在主 UI 线程中执行其块代码。但是代码如何在一个已经存在的线程中执行呢?我的意思是 UI 线程已经在执行代码(例如接收输入事件、创建新活动等),那么代码是如何执行的呢?它只是停止所有其他 UI 线程代码,执行自身然后 return 到其他代码?或类似的东西?请赐教。
我听说 RunOnUiThread
方法将一个 runnable
(kotlin 中的 {} 块)发送到 UI 线程的 handler
。那么UI线程会在不忙的时候执行runnable.run()
方法。如您所知,必须 UI 线程不忙,因为如果不忙,系统会显示 ANR(应用程序未响应)消息(甚至当 UI 线程尝试 运行 time-consuming(滞后)作业(如网络 :))时,它会抛出 Exception
s。
**编辑**
这是一个 java 代码,向您展示了 runOnUiThread
是如何工作的。
引用自 this blog (Korean)
@Override
public final void runOnUiThread(Runnable action)
{
if (Thread.currentThread() !=mUiThread)
{
mHandler.post(action);
}
else
{
action.run();
}
}
P.S。我不是kotlin的出口,但我希望我的回答对你有帮助。
它向 ui 线程上的循环程序发送一条消息,将带有 runOnUiThread 块中代码的 Runnable 传递给它
doAsync {
doSomethingAsync()
uiThread {
doSomethingUiThread()
}
}
基于上面的代码。我知道 doAsync
创建一个线程并在该新线程中执行其块内的代码。此外,uiThread
在主 UI 线程中执行其块代码。但是代码如何在一个已经存在的线程中执行呢?我的意思是 UI 线程已经在执行代码(例如接收输入事件、创建新活动等),那么代码是如何执行的呢?它只是停止所有其他 UI 线程代码,执行自身然后 return 到其他代码?或类似的东西?请赐教。
我听说 RunOnUiThread
方法将一个 runnable
(kotlin 中的 {} 块)发送到 UI 线程的 handler
。那么UI线程会在不忙的时候执行runnable.run()
方法。如您所知,必须 UI 线程不忙,因为如果不忙,系统会显示 ANR(应用程序未响应)消息(甚至当 UI 线程尝试 运行 time-consuming(滞后)作业(如网络 :))时,它会抛出 Exception
s。
**编辑**
这是一个 java 代码,向您展示了 runOnUiThread
是如何工作的。
引用自 this blog (Korean)
@Override
public final void runOnUiThread(Runnable action)
{
if (Thread.currentThread() !=mUiThread)
{
mHandler.post(action);
}
else
{
action.run();
}
}
P.S。我不是kotlin的出口,但我希望我的回答对你有帮助。
它向 ui 线程上的循环程序发送一条消息,将带有 runOnUiThread 块中代码的 Runnable 传递给它