When I'm running the code below in Android, it runs fine.
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}")
}
}
}
It print
Track: main runBlocking pre : main
Track: main runBlocking post : main
However, if I provide the Main context to runBlocking, as I have below
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}")
}
}
}
it hangs and not running it.
Note: the Dispatchers.Main is using
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1'
Why did it hang?
I thought not providing Dispatchers.Main to the runBlocking is to have it run in main thread, which is the same as providing Dispatchers.Main. Did I mis-understand it?
Note: The libraries I use are as below
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'