関連記事:【Kotlin/JVM】CoroutineDispatcher を作る
次のようにすることで Looper
を持つスレッドの CoroutineDispatcher
を作ることができる。
import android.os.Handler
import android.os.HandlerThread
import kotlinx.coroutines.*
import kotlinx.coroutines.android.HandlerDispatcher
import kotlinx.coroutines.android.asCoroutineDispatcher
val handlerDispatcher: HandlerDispatcher =
HandlerThread("HandlerThreadDispatcher")
.apply { start() }
.looper
.let { Handler(it) }
.asCoroutineDispatcher()
HandlerDispatcher
クラスは Dispatchers.Main
の型である MainCoroutineDispatcher
を継承しており1、Dispatchers.Main
と同じく immediate
プロパティを持つ。
Realm では、メインスレッドではない、Looper を持つスレッドが必要になることがある。
そのときにはこの方法を使うとコルーチンで扱うことができて便利だ。
/以上
-
型名からは継承関係が逆のように感じるが…。 ↩