【发布时间】:2020-12-25 10:38:35
【问题描述】:
当我在 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}")
}
}
}
打印出来
Track: main runBlocking pre : main
Track: main runBlocking post : main
但是,如果我将 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}")
}
}
}
它挂起并且没有运行它。
注意:Dispatchers.Main 正在使用
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1'
为什么挂了?
我认为不向runBlocking 提供Dispatchers.Main 是让它在主线程中运行,这与提供Dispatchers.Main 相同。是不是我理解错了?
注意: 我使用的库如下
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.21"
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1'
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.4.2'
【问题讨论】:
标签: android kotlin kotlin-coroutines