Dispatchers
Kotlinでコルーチンを使用する際、Dispatchers
によってどのスレッドで実行するかを選択することができます。
GlobalScope.launch(Dispatchers.Main) {
// 何かしらの処理
}
Dispatchers.Main
は、コルーチンの実行スレッドを表しています。
主な種別は以下の通りです。
種別 | 説明 |
---|---|
Defalut | バックグラウンドスレッド。リストの並び替えやJSONのパースなどのCPUに負荷がかかる処理向け。 |
IO | バックグラウンドスレッド。データベース処理やファイルの読み書きおよびネットワーク処理といった入出力処理向け。 |
Main | メインスレッド。他のDispatchers での処理終了後に結果をUIに反映したり、delay 関数でnミリ秒後にUIを表示させるなどのUI処理用。 |
withContext
コルーチンの中で実行スレッドを切り替えるには、withContext
を使用します。
class MainActivity : AppCompatActivity(), CoroutineScope {
...
// コルーチンを使用する際のデフォルトのDispatchersを設定する
override val coroutineContext: CoroutineContext
get() = SupervisorJob() + Dispatchers.Main
...
launch {
// ここではメインスレッドとして処理される
withContext(Dispatchers.IO) {
// withContextによってバックグラウンドスレッド(入出力処理)に切り替わる
}
}