为什么我的应用程序在IO范围内更新文本视图后不会崩溃



所以,我现在有点困惑。

我有一个使用Kotlin Coroutines的小型Android应用程序。我知道我们有不同的范围可以运行协同程序,我认为如果我们在IO范围内尝试更新UI,应用程序会崩溃。通常,在这种情况下,会显示以下运行时异常:

android.util.AndroidRuntimeException:动画只能在循环线程上运行

奇怪的是,当我更新文本视图的文本时,我的应用程序上不会发生这种情况。下面是我的意思的一个例子:

fun myFunction() {
CoroutineScope(Dispatchers.IO).launch {
textView.text = "Hello" // This should throw an exception, right? But it doesn't
inputLayout.editText!!.text.clear() // This DOES throw an exception tho
}
}

你能帮我理解textView.text = "Hello"为什么不抛出异常吗?我是不是错过了理解一些基本的协同工作概念?

谢谢!

Dispatchers.IO-->用于做网络和磁盘相关的工作。

Dispatcher.Main-->用于在Android的UI线程上进行工作。

默认调度程序--->用于进行CPU密集型工作。

// Job and Dispatcher are combined into a CoroutineContext
private val job = SupervisorJob()
private val ioScope by lazy { CoroutineScope(job + Dispatchers.IO) }
fun myFunction() {
ioScope.launch {
withContext(Dispatchers.Main) {
textView.text = "Hello"
inputLayout.editText!!.text.clear(
}
}
}

参考文件:https://www.raywenderlich.com/34262147-kotlin-coroutines-tutorial-for-android-advanced