【发布时间】:2020-06-02 00:55:55
【问题描述】:
如果CoroutineScope(job+Dispatchers.Main){...} 中的操作在主线程上运行,那么它为什么不违反Android 的要求,即不允许慢速(阻塞)操作(网络等)在主/UI 线程上运行?我可以在这个范围内运行阻塞操作,并且 UI 根本不会冻结。
如果有人能解释幕后发生的事情,我将不胜感激。我的猜测是它类似于 JavaScript 如何使用事件循环管理阻塞操作,但我很难找到任何相关材料。
【问题讨论】:
-
I can run blocking operations with this scope and the UI does not freeze at all.是什么意思?请举个例子? -
@DmitriiLeonov,例如,我可以通过调用
delay(1000)来暂停线程。如果我在 UI 线程上执行此操作,这不会导致出现 ANR 屏幕吗?
标签: android kotlin-coroutines android-thread coroutinescope