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
会阻塞线程。
我最近检查了 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
会阻塞线程。