Android / Kotlin / Programming

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が使われていないことを不思議に思っていました。
調べたら上記のようにあり、イベントループがどんなものかはまだ調べていませんが、とりあえず必要ないことがわかったので安心しました。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です