Kotlin Coroutines Flowを
触ってみた話し
tomoya0x00
Coroutine ハンズオン by DroidKaigi @ LINE Fukuoka
#droidkaigi_roadshow
Slide 2
Slide 2 text
About me
tomoya0x00
Twitter, GitHub, Qiita
Android, Embedded system, BLE/BT, iOS
DroidKaigi staff (since DroidKaigi 2019)
DeNA Co., Ltd. Automotive Business Unit.
Slide 3
Slide 3 text
Kotlin Coroutines Flow is 何︖
Slide 4
Slide 4 text
Kotlin Coroutines Flow is 何︖
https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-
core/kotlinx.coroutines. ow/
Flow — asynchronous cold stream of elements.
RxJavaみたいなもの
最近、kotlinx-coroutines-core:1.3.0でstableになった
ただし、⼀部はまだexperimentalだったりpreviewだったり
@ExperimentalCoroutinesApi
@FlowPreview
簡単な使い⽅
val myFlow = flow { // flow builderの⼀つ
emit(1)
emit(2)
}
GlobalScope.launch {
myFlow.collect { value ->
println("Received $value")
// Received 1
// Received 2
}
}
Slide 10
Slide 10 text
NGな使い⽅
Slide 11
Slide 11 text
NGな使い⽅
suspend fun hoge() = 2
val myFlow = flow {
emit(1) // OK
withContext(Dispatchers.IO) {
emit(hoge()) // NG(collectする側のコンテキストの強制指定はダメ)
}
}
GlobalScope.launch {
myFlow.collect { value ->
println("Received $value")
}
}
Slide 12
Slide 12 text
こうすればOK
suspend fun hoge() = 2
val myFlow = flow {
emit(1) // OK
val result = withContext(Dispatchers.IO) { hoge() }
emit(result) // OK
}
GlobalScope.launch {
myFlow.collect { value ->
println("Received $value")
}
}