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

Kotlin Coroutines ことはじめ

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for M.Inomata 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

Avatar for M.Inomata

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> { } ... ਌͕ૹ৴ͯ͠ࢠ͕ड৴͢ΔҰํ ޲νϟωϧΛ࡞Δίϧʔνϯɻ