ネット上を調べてみてもよくわかりません。
難しい言葉や experimental な仕様の変更などあったりして。
少しづつ試してみながらマスターしていきましょう。
// build.gradle
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:0.22.2"
//gradle.properties
kotlin.coroutines=enable
kotlinx.coroutines/coroutines-guide-ui.md at master · Kotlin/kotlinx.coroutines
まず、これ。
for (i in 1..10) {
Timber.d("$i")
Thread.sleep(1000)
}
非同期にしたいですよね。
launch から始めます。
launch { // @
for (i in 1..10) {
Timber.d("$i")
Thread.sleep(1000)
}
}
launch {
for (i in 1..10) {
Timber.d("$i")
delay(1000) // @
}
}
引数をつけて渡す。
UI :
UIスレッドで実行。CommonPool :
バックグランドスレッドで実行。
launch(UI) { // @
for (i in 1..10) {
Timber.d("$i")
delay(1000)
}
}
launch(CommonPool) { // @
for (i in 1..10) {
Timber.d("$i")
delay(1000)
}
}
launch(UI + CommonPool) { // @
for (i in 1..10) {
Timber.d("$i")
delay(1000)
}
}
launch() の戻りからキャンセルできます。
val job = launch(UI) { // @
for (i in 1..10) {
Timber.d("$i")
delay(1000)
}
}
fab.setOnClickListener {
job.cancel() // @
}
まとめ
UIスレッドに限定されたコルーチンは、UIスレッドをブロックすることなく、UI内の何かを自由に更新して中断することができます。
delay が待っている間UIスレッドはブロックされないのでUIはフリーズしません。ただ単にコルーチンを中断します。
Job.cancelは完全にスレッドセーフでノンブロッキングです。
実際に終了するのを待つことなく、コルーチンがそのジョブをキャンセルするように通知するだけです。 どこからでも呼び出すことができます。
基本的な非同期呼び出しは、launch() と async() の2つ。似ているが戻りが異なる。
関連ワード: Android・AndroidStudio・Gradle・Kotlin・おすすめ・初心者・開発・coroutine