小编Nat*_*e T的帖子

为 runBlocking 提供 Dispatches.Main 挂起 Android 应用程序。为什么?

当我在 Android 中运行下面的代码时,它运行良好。

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        runBlocking {
            launch { 
                Log.d("Track", "main runBlocking pre       : ${Thread.currentThread().name}")
                delay(500)
                Log.d("Track", "main runBlocking post      : ${Thread.currentThread().name}")
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

它打印

Track: main runBlocking pre       : main
Track: main runBlocking post      : main
Run Code Online (Sandbox Code Playgroud)

但是,如果我将 Main 上下文提供给runBlocking,如下所示

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        runBlocking(Dispatchers.Main) { // Provide Dispatchers.Main
            launch { 
                Log.d("Track", "main runBlocking pre       : ${Thread.currentThread().name}")
                delay(500)
                Log.d("Track", "main runBlocking post      : ${Thread.currentThread().name}")
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

它挂起而不是运行它。

注: …

android kotlin kotlin-coroutines

9
推荐指数
1
解决办法
532
查看次数

标签 统计

android ×1

kotlin ×1

kotlin-coroutines ×1