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によってバックグラウンドスレッド(入出力処理)に切り替わる
}
}