android - Kotlin 协程 UI 未冻结
问题描述
我最近检查了 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
会阻塞线程。
推荐阅读
- haskell - 签名中的绑定类型
- r - r闪亮输出的打印预览中没有背景颜色
- pattern-matching - 匹配中的 OCaml 非文字
- angular - Angular Data Table 扩展行仅占用父级 1 列的空间
- redis - 是否可以将 redis 键空间通知推送到 redis 流而不是 pub/sub 通道
- c# - 获取所有注册的 IOptions
- php - 如何使用 mongodb /PHP7 上的子句进行查询?
- azure - 天蓝色聊天机器人的 Skype 频道
- php - FormBuilder如何反转ChoiceList的内容
- c# - 在一个 A4 页面上打印两个 A5 页面 - 通过代码配置打印设置