Kotlin 协程 UI 不会冻结

Gla*_*adi 0 android kotlin android-livedata kotlin-coroutines

我最近检查了 livedata 协程,发现了一些我无法理解的东西。为什么这段代码(观察时)没有冻结 UI?

    val lv =
    liveData (context=Dispatchers.Main){
        var x = 0
        while (true){
            emit(x++)
            delay(1000)
            println(Thread.currentThread().name)
        }
    }
Run Code Online (Sandbox Code Playgroud)

谢谢。

And*_*ana 5

delay不会阻塞线程。它只是暂停您的协程并在一秒钟后恢复它。您可以更改delayThread.sleep(1000)并且您的 UI 将被冻结,因为Thread.sleep会阻塞线程。