これは何
動機
- RxAndroidの先行きが不透明
- 社内で作ってるRxJava用ユーティリティを公開したい(未着手)
- RxJavaのベストプラクティスやバッドくラクティスを
example/に提供したい(未着手)
提供しているもの
AndroidSchedulers- main threadで実行するスケジューラAndroidCompositeSubscription-CompositeSubscriptionをAndroidコンポーネントで使いやすくしたものOperatorAddToCompositeSubscription- method chain中にAndroidCompositeSubscription#add()をするためのオペレータOperatorFilterLite<T>-filter()で戻り値のためのオブジェクト生成をしないようにするもの
AndroidSchedulers
- RxAndroidのものと同じ
AndroidSchedulers.mainThread()AndroidSchedulers.from(Handler)
Schedulers
- コールバックベースのAPI clientをobservable化したケースではそもそも必要ない
- 通常、API requestはbackground threadで実行されるはず
Schedulers.newThread()は新しいスレッドを生成するので非効率だと思われるSchedulers.ioとSchedulers.computation()を使い分ける?- AsyncTaskのExecutorServiceに乗っかりたい気もする(未検証)
Schedulersのベストプラクティス
- To be continued...
AndroidCompositeSubscription (ACS)
CompositeSubscriptionは同じインスタンスを再利用できない仕様- これがAndroid componentの「同じインスタンスがsuspend/resumeする」という特徴と相性が悪い
- ACS は同じインスタンスを再利用できるのでActivityのfinalフィールドとして持てる
OperatorAddToCompositeSubscription
- ACSを簡単に使えるようにするためのオペレータ
observable.lift(new OperatorAddToCompositeSubscription(compositeSubscription))するだけcompositeSubscription.add(observable)と同じだがメソッドチェインに混ぜられる
- ACS自体は
Activity#onPause()やActivity#onDetach()でunsubscribe()する
OperatorFilterLite
filter()と同じだが述語オブジェクトでBooleanオブジェクトではなくprimitiveのboolean値を使うlift(new OperatorFilterLite<T>() { ... })とするだけ
実装していないもの
- 各種eventのobservable化
- サポート予定なし。RxBindingを使おう
- AppObservable
- 正しく実装するのが困難なためサポート予定なし
- ACSを使おう
ToDo
- RxBindingとRxAndroidの動向を見守る
- OperatorFilterLiteはRxJavaに提案してもいいかも