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

Androidアプリにおける Kotlin Coroutines のより良い使い方 / Better Use of Kotlin Coroutines in Android Apps

Androidアプリにおける Kotlin Coroutines のより良い使い方 / Better Use of Kotlin Coroutines in Android Apps

Kotlin Coroutines は、もはやAndroidアプリ開発において必須の技術となりました。
私達のチームでも Kotlin Coroutines を本格的に導入して数年が経ち、既に多くのコードがコルーチンベースで書き換えられています。
Kotlin Coroutines を用いることで非同期処理などが簡潔に記述できるようになりますが、Androidアプリ上で利用する場合はライフサイクルやキャンセルの扱い方など注意すべき点がいくつか存在します。
今回は、我々のチーム内でのコードレビューから得られた数多くの知見を紹介し、Androidアプリ開発における Kotlin Coroutines のより良い使い方について発表します。

発表者/大石将邦

※ この資料は以下のイベントで発表しました。
https://fortee.jp/kotlin-fest-2022/proposal/930f6efb-c288-4497-9beb-1ba69f29cdbe

LINE Developers

December 10, 2022
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

  1. NBJOTBGFͱ͸ w ϝΠϯεϨουʹඥͮ͘ίϧʔνϯ ྫ͑͹MJGFDZDMF4DPQF͔ΒMBVODI ͞Εͨίϧʔνϯ ͔Β௚઀ݺ͹Εͯ΋໰୊ͳ͍ੑ࣭ͷ͜ͱ w ผͷݴ༿Ͱݴ͑͹ɺXJUI$POUFYU %JTQBUDIFST*0 \ʜ^ͳͲͷར༻Λ

    ʮݺͼग़͠ଆ͕ߟྀ͠ͳͯ͘΋Α͍ʯΑ͏ʹ͢Δ͜ͱ w NBJOTBGFͳTVTQFOEؔ਺ΛݺͿͱ͖͸%JTQBUDIFST*0͸ෆཁ w NBJOTBGFͳؔ਺಺Ͱ͸ɺΧϨϯτεϨουΛϒϩοΫͯ͠͸ͳΒͳ͍ w ίϧʔνϯΛlTVTQFOEz͢Δͷ͸0,
  2. XJUI$POUFYU %JTQBUDIFST*0 ͱΩϟϯηϧ w ϒϩοΩϯά*0 ྫ͑͹lJOQVU4USFBNSFBE zͳͲ ͸ lXJUI$POUFYU %JTQBUDIFST*0

    \ʜ^zϒϩοΫͰғ͏͜ͱʹΑͬͯNBJO TBGFʹͰ͖Δ w ϑΝΠϧ*0ͳͲ͸͜Ε͚ͩͰे෼ w ͨͩ͠ɺίϧʔνϯ͕Ωϟϯηϧ͞Εͯ΋*0ૢ࡞ࣗମ͸Ωϟϯηϧ͞Εͳ͍ w )551ΞΫηεͷΑ͏ͳ௕࣌ؒ଴ػ͢ΔՄೳੑͷ͋Δ*0ૢ࡞ʹ͍ͭͯ͸ TVTQFOE$BODFMMBCMF$PSPVUJOFؔ਺ͳͲͱ૊Έ߹ΘͤΔ͜ͱΛߟྀ͢Δ
  3. SVO#MPDLJOH͸࠷ޙͷखஈ w ίϧʔνϯ͸جຊతʹlDPSPVUJOF4DPQFMBVODI\ʜ^zͷܗͰىಈͤ͞Δ w SVO#MPDLJOH\ʜ^͸Ͱ͖ΔݶΓ࢖Θͳ͍͜ͱ w ಛʹɺϝΠϯεϨου͔ΒSVO#MPDLJOHΛ࢖͏ͱ༰қʹσουϩοΫΛҾ͖ى͜ ͯ͠͠·͏ w SVO#MPDLJOH͸ɺίϧʔνϯʹରԠ͍ͯ͠ͳ͍όοΫάϥ΢ϯυεϨουͰಈ͘

    ॲཧ͔ΒTVTQFOEؔ਺Λݺͼग़͢ͱ͖ͷʮ࠷ऴखஈʯͱͯ͠ͷΈ࢖͏ w ΧϨϯτεϨουΛϒϩοΫ͢Δؔ਺͸ld#MPDLJOHzͱ໋໊͢Δ͜ͱʹͯ͠ɺޡͬͯ ϝΠϯεϨου͔Βݺͼग़ͯ͠͠·͏͜ͱΛ๷ࢭ͠Α͏
  4. ίϧʔνϯར༻ͷϕετϓϥΫςΟε w TVTQFOEؔ਺͸NBJOTBGF͔ͭDBODFMMBCMFʹ͢Δ w $BODFMMBUJPO&YDFQUJPOΛDBUDI͠ͳ͍ DBUDIͨ͠৔߹͸ඞͣSFUISPX  w 'MPX͸DPMMFDU͞Ε͍ͯΔ͚ؒͩಈ࡞͢ΔΑ͏ʹ͢Δ w

    ίϧʔνϯΛMBVODI͢ΔΫϥεʹ͸ɺͦͷΠϯελϯεͷϥΠϑαΠΫϧͱҰகͨ͠ $PSPVUJOF4DPQFΛ࣋ͨͤΔ w (MPCBM4DPQF΍ಠࣗͷ$PSPVUJOF%JTQBUDIFS͸࢖Θͳ͍ w ίϧʔνϯͷഉଞʹ͸.VUFYΛ࢖͏ w SVO#MPDLJOH͸όοΫάϥ΢ϯυεϨου͔Β࠷ޙͷखஈͱͯ͠ͷΈ࢖͏
  5. ίϧʔνϯͱ"OESPJEϥΠϑαΠΫϧͷམͱ݀͠ w "OESPJE9'SBHNFOUͰ͸ݪଇͱͯ͠WJFX-JGFDZDMF0XOFSMJGFDZDMF4DPQFΛ࢖͏ w MJGFDZDMF4DPQFMBVODI8IFO4UBSUFE΍MJGFDZDMFXIFO4UBSUFE͸࢖Θͳ͍ w 'MPXΛDPMMFDU͢Δ৔߹͸SFQFBU0O-JGFDZDMF w ͦΕҎ֎ͰɺTUBSUFEҎ্ͷͱ͖ʹॲཧΛ࣮ߦ͍ͨ͠৔߹͸MJGFDZDMFXJUI4UBSUFE w

    "VUP3FTFU-JGFDZDMF4DPQFͷΑ͏ͳϥΠϒϥϦΛ࠾༻͢Δ͜ͱ΋ݕ౼͢Δ w +FUQBDL$PNQPTFͰ'MPXΛDPMMFDU͢Δ৔߹͸DPMMFDU"T4UBUF8JUI-JGFDZDMF w "DUJWJUZPO4UPQ ͷޙͰ΋ಈ͖ଓ͚Δॲཧ ಛʹ'MPX ͕ແ͍͜ͱΛςετ͢Δ