Li::Feel

りとるす的雑記帳。

Android開発:RxJavaのお勉強記事まとめ

なんで急にRxJavaなんて始めたのか

夏休みに某所にインターンシップに行ったとき、初めてRxJavaの存在を教えてもらったのがきっかけで、ちょっと気になって調べてだいぶよさそうだったので、今作っている某アプリに組み込むことにしました。

理解するのにだいぶ苦労したので、お勉強するときに見た記事を書いておきます。

さわりだけまとめる

RxJavaは、ReactiveXJava用の実装で、Observerパターンの拡張にあたります。 Observableから値やらが同期・非同期で流れてくるので、それを関数型プログラミングのノリで加工したり、処理の状況をSubscriberに通知したりといったことができます。

Android開発において特に有用なのが、RxJavaを用いた場合、悪名高きAsyncTaskやAsyncTaskLoaderのコールバック地獄を解消できる上にエラーハンドリングがだいぶ楽になるといった点で、AsyncTask系さっさと滅びてくれと思っていた自分的には絶対に得だと思った次第です。

あとは、Android界隈の神、JakeWharton氏の所属するSquare印のRetrofitが対応しており、Androidの非同期処理は大抵ネットワーク接続な気がしていることから、これをやっておけば当分大丈夫なのではという打算があります。

基本はこの記事

この記事が非常によくまとまっており、勉強する上で楽でした。

qiita.com

Observableの生成について

ReactiveXの提供するドキュメントはわりとしっかりしている(気がする)ので、そこを見れば大抵わかります。

ReactiveX - Operators

ただ、RxJavaで同期処理を非同期で書こうとすると、Observable.create()を使うことが多いと思いますが、ドキュメント上は

advanced use only! create an Observable from scratch by means of a function, consider fromEmitter instead

Creating Observables · ReactiveX/RxJava Wiki · GitHub

となっており、実装にはちょっと注意が必要です。

RxJavaの項目を見ればわかりますが、

It is good practice to check the observer’s isUnsubscribed state from within the function you pass to create so that your Observable can stop emitting items or doing expensive calculations when there is no longer an interested observer.

ReactiveX - Create operator

とか書いてあります。ただ、日本語のブログでこれをしっかり守ってisUnsbscribed()でのステータスチェックをしている例は見かけなかったので十分に注意が必要かと思います。

unsbscribeについて

メモリリークしないようにOnDestroyとかでunsubscribeしておきましょう。 NullPointerExceptionにならないように、Subscription.empty()とかで初期化しておきましょう。

qiita.com

さいごに

ほかにも、これは勉強しておいたほうがいいよ!とか、この解釈ちょっと違うよ!とかあれば教えていただければ幸いです。