Android runBlockingってなに?
runBlocking とは
runBlockingは普通の関数(fun func() {})とsuspend付きの関数(suspend fun func() {})の橋渡しとなります。
例えば下のコードのようにrunBlocking無しでcoroutineScopeを呼び出そうとすると
import kotlinx.coroutines.*
fun main() {
println("Start")
//runBlocking {
coroutineScope {
launch {
println(function1())
}
}
//}
println("End")
}
suspend fun function1(): String {
delay(1000)
return "function1"
}
Suspend function ‘coroutineScope’ should be called only from a coroutine or another suspend function
suspend関数である「coroutineScope」はコルーチンもしくは他のsuspend関数から呼び出す必要があります。
とエラーが表示されます。
このようにKotlinのプレイグラウンド(オンラインエディタ)や恐らくネイティブアプリ以外の開発時にはrunBlockingが必要ですが、Android開発では不要です。
Android開発でrunBlockingは不要
公式のcodelabsにはこのようにあるため不要となります。
注: 一般的に、このような main() 関数内で runBlocking() を使用することは、学習目的に限ります。Android には、準備が整ったときの再開を処理するためのイベントループが用意されているため、Android アプリのコードに runBlocking() は必要ありません。ただし、runBlocking() はテストには有用です。テストのアサーションを呼び出す前に、アプリの特定の条件を待たせることができます。
Kotlin のプレイグラウンドのコルーチンの概要 より
AndroidでrunBlockingが使われていないことを不思議に思っていました。
調べたら上記のようにあり、イベントループがどんなものかはまだ調べていませんが、とりあえず必要ないことがわかったので安心しました。
コメント