Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin Coroutines ことはじめ

M.Inomata
November 30, 2019

Kotlin Coroutines ことはじめ

Kotlin Coroutines の基本や仕組みの話です。
Android での話を中心にしてますが、Kotlinが動く環境ならほぼ同じなので、Android以外のKotlin開発者の方も参考になるかと思います。

2019/11/30 Android 研究&発表会登壇資料
https://arap.connpass.com/event/153097/ #arap_osaka

M.Inomata

November 30, 2019
Tweet

More Decks by M.Inomata

Other Decks in Technology

Transcript

  1. Suspending Function ͷੑ࣭ • suspend ؔ਺͸ଞͷ suspend ؔ਺ͷதͰ͔͠ ࣮ߦͰ͖ͳ͍ɻ •

    ࢠͷ suspend ؔ਺͕தஅ͢Δͱɺ਌ͷ suspend ؔ਺΋ࢭ·Δɻ • suspend ؔ਺ͷதͰී௨ͷؔ਺(suspendͰͳ ͍ؔ਺)ΛݺͿ͜ͱ͸Ͱ͖Δɻ
  2. ͜ͷαϯϓϧͰ࢖͍ͬͯΔؔ਺ • ίϧʔνϯϏϧμʔ(ੜ੒ؔ਺): • runBlocking<T> { ... } • CoroutineScope#launch

    { ... } • suspendؔ਺:
 delay(timeMillis: Long) ※஫: runBlocking͸ཚ༻NGɻ
 ɹɹAndroid؀ڥͰ͸࢖Θͳ͍͜ͱʂ
  3. CoroutineScopeΫϥε • ίϧʔνϯͷੜଘظؒΛ؅ཧ͢ΔΦϒδΣΫτɻ • MainScope ... UIεϨουͰಈ࡞͢Δείʔϓɻ 
 → AndroidͷActivity

    ͳͲͱඥ෇͚ͯը໘ͷ
 ɹϥΠϑαΠΫϧͱҰகͤ͞ΒΕΔɻ • GlobalScope ... ΞϓϦͷੜଘظؒͱಉ͡είʔϓɻ
 → όονॲཧͳͲɺΞϓϦੜଘதʹऴΘͬͯ͸ࠔΔॲཧΛ࣮ߦ͢Δɻ
  4. αεϖϯυؔ਺ͷྫ • delay (timeMillis: Long) 
 ... ࢦఆϛϦඵ଴ͭɻ • withTimeout<T>(timeMillis:

    Long) { ... } withTimeoutOrNull<T>(timeMillis: Long) { ...}
 ... ϒϩοΫ಺ͷॲཧ͕ࢦఆϛϦඵΛ௒͑ͨͱ͖ʹ
 ɹλΠϜΞ΢τͤ͞Δɻ • yield() 
 ... ॲཧΛॠஅͯ͠ɺ(͋Ε͹)ଞͷίϧʔνϯʹॲཧΛճ͢ɻ
  5. CoroutineContext %JTQBUDIFSɿ.BJO +PCɿͳ͠ ϝΠϯείʔϓͷίϯςΩετ %JTQBUDIFSɿ.BJO +PCɿίϧʔνϯ είʔϓ1ͷίϯςΩετ %JTQBUDIFSɿ.BJO +PCɿίϧʔνϯ είʔϓͷίϯςΩετ

    %JTQBUDIFSɿ%FGBVMU +PCɿίϧʔνϯ είʔϓͷίϯςΩετ ϝΠϯείʔϓ ίϧʔνϯ ίϧʔνϯ ίϧʔνϯ1ͷείʔϓ είʔϓ ίϧʔνϯͷείʔϓ είʔϓ ίϧʔνϯ ίϧʔνϯͷείʔϓ είʔϓ
  6. CoroutineContext %JTQBUDIFSɿ.BJO +PCɿͳ͠ ϝΠϯείʔϓͷίϯςΩετ %JTQBUDIFSɿ.BJO +PCɿίϧʔνϯ είʔϓ1ͷίϯςΩετ %JTQBUDIFSɿ.BJO +PCɿίϧʔνϯ είʔϓͷίϯςΩετ

    %JTQBUDIFSɿ%FGBVMU +PCɿίϧʔνϯ είʔϓͷίϯςΩετ ϝΠϯείʔϓ ίϧʔνϯ ίϧʔνϯ ίϧʔνϯ1ͷείʔϓ είʔϓ ίϧʔνϯͷείʔϓ είʔϓ ίϧʔνϯ ίϧʔνϯͷείʔϓ είʔϓ
  7. CoroutineContext %JTQBUDIFSɿ.BJO +PCɿͳ͠ ϝΠϯείʔϓͷίϯςΩετ %JTQBUDIFSɿ.BJO +PCɿίϧʔνϯ είʔϓ1ͷίϯςΩετ %JTQBUDIFSɿ.BJO +PCɿίϧʔνϯ είʔϓͷίϯςΩετ

    %JTQBUDIFSɿ%FGBVMU +PCɿίϧʔνϯ είʔϓͷίϯςΩετ ϝΠϯείʔϓ ίϧʔνϯ ίϧʔνϯ ίϧʔνϯ1ͷείʔϓ είʔϓ ίϧʔνϯͷείʔϓ είʔϓ ίϧʔνϯ ίϧʔνϯͷείʔϓ είʔϓ
  8. flow ίϧʔνϯ • flow = γʔέϯεͰॱ࣍݁ՌΛྲྀ͢ async. • Rx ObservableΛࢀߟʹ࡞ΒΕ͍ͯΔɻ

    • map(transform{}), flatMap,ϑΟϧλ,
 ྫ֎෮ؼॲཧ(catch{}), εϨου੾Γସ͑, combineLatest, zip ͳͲ΋͋Δɻ
  9. Channels, produce, actor • Channel<T> ͸ίϧʔνϯؒͷ૒ํ޲ͷσʔ λ΍ΓऔΓʹ͔ͭ͑ΔΦϒδΣΫτɻ • produce<T> {

    } ... ࢠ͕ૹ৴ͯ͠਌͕ड৴͢Δ Ұํ޲νϟϯωϧΛ࡞Δίϧʔνϯɻ • actor<T> { } ... ਌͕ૹ৴ͯ͠ࢠ͕ड৴͢ΔҰํ ޲νϟωϧΛ࡞Δίϧʔνϯɻ