Kotlin 协程 UI 没有冻结

Kotlin coroutines UI not freezing

我最近检查了 livedata 协同程序,但我遇到了一些我无法理解的事情。为什么此代码(观察时)没有冻结 UI?

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

谢谢。

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