OkHttp3とRetrofit2そしてコルーチンを組み合わせて非同期通信を実現するお話
OkHttp3+Retrofit2+...
View Slide
● Yoshihisa Takeda● @bomneko_attack● 株式会社Diverse(ミクシィグループ)● YYCというマッチングアプリの開発をしています● Android開発をはじめてもうすぐ1年
APIを叩くAndroidアプリをつくるとき通信部分を作り込むときにつかうライブラリ
OkHttphttp://square.github.io/okhttp/
Retorofithttp://square.github.io/retrofit/
コールバック地獄…!
ReactiveX(Rx)
Observable系(Single,Flowableなど)を返すように書く
CallをRxJava2のObservable系に変換するCall Adapterを指定する
コールバック地獄からの解放…!
完
完?
できることならこう書きたくないですか?
Coroutine
OkHttp3+Retrofit2+Coroutine
Coroutine● 「中断・再開が可能な関数」○ とりあえずの理解としては「軽量スレッド」的なもの● Kotlin1.1から実験的に導入された● Coroutinesをゼロから説明すると本1冊書けるぐらいになるので本発表では導入とRetrofitでの使い方についてのみ
警告● Kotlin CoroutineはKotlin1.2の時点ではExperimentalで提供プロダクションへの導入はまだ控えたほうが安全○ 1.3でExperimentalが外れる予定なので勉強をはじめるには良いタイミング○ 本資料の組み合わせは Kotlin 1.2 + kotlinx.coroutine 0.21.1
導入● build.gradleに2つライブラリを追加○ kotlin.coroutines=enable はいらない
Call Adapter● Jake神のCall Adapter○ 他にもう1つ見つけたけど今回はこれ○ CallをCoroutineのDeferredに変換する
Deferredを返すように書く
CallをCoroutineのDeferredに変換するAdapterを指定
レスポンスが返ってくるまで中断(UIスレッドはブロックされない )
Rxはいらない子になるのか?● No● RxがPromise代わり使われてきたという歴史● コルーチンもPromiseを同期的に書く手法(async/await)を提供しているので勘違いしやすい● Rxは「リアクティブプログラミングのためのフレームワーク」なのでそもそも比較対象にならない
まとめ● もうすぐくるかもしれないコルーチン時代に備えて勉強はしておこう● Jakeのライブラリを使えばOkHttpとRetrofitの組み合わせにおいてコルーチンを簡単に導入でき使える!○ もう1つはこれ。どっちを使うかはお好みで …https://github.com/gildor/kotlin-coroutines-retrofit
宣伝DiverseはDroidKaigi2018のPLATINUMスポンサーとして参加します当日ブースで同人誌を無料配布します