Islands in the byte stream

Technical notes by a software engineer

RxT4Aの紹介 #potatotips 19

これは何

動機

  • RxAndroidの先行きが不透明
  • 社内で作ってるRxJava用ユーティリティを公開したい(未着手)
  • RxJavaのベストプラクティスやバッドくラクティスを example/ に提供したい(未着手)

提供しているもの

  • AndroidSchedulers - main threadで実行するスケジューラ
  • AndroidCompositeSubscription - CompositeSubscriptionAndroidコンポーネントで使いやすくしたもの
  • 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.ioSchedulers.computation() を使い分ける?
    • AsyncTaskのExecutorServiceに乗っかりたい気もする(未検証)

Schedulersのベストプラクティス

  • To be continued...

AndroidCompositeSubscription (ACS)

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に提案してもいいかも