首页 > 解决方案 > Kotlin 协程 UI 未冻结

问题描述

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

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

谢谢。

标签: androidkotlinandroid-livedatakotlin-coroutines

解决方案


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


推荐阅读