Observableを使用していた際につまづいたことで得た知見もどき。
遭遇した事案の擬似コード
CompositSubscription subscriptions = new CompositSubscription();
...
Observable<Integer> numberObservavle = Client().getNumber()
.map(Response::Entity)
.toBlocking()
.single();
subscriptions.add(AppObservable.bindActivity(this,
numberObservable.map(/*以下略*/)
).subscribe());
かなりてきとーだけど、上記のようなコードを実行しようとすると、subscription.add()の部分でnumberObservableの処理が終わらないままになってしまう。
このコードだと、numberObservableObservable numberObservavle = ... の部分ではnumberOnservableはあくまで処理待ちの状態になっただけで、実際はsubscriptions.add(bindActivity())で実行される。
これを解消するにはnumberObservableの.toBlocking().single()をなくすと
subscriptions.add(bindActivity())で期待通り実行される。
なので、下記みたいに書き直せばOK。
(省略)
Observable<Integer> numberObservavle = Client().getNumber()
.map(Response::Entity);
subscriptions.add(AppObservable.bindActivity(this,
numberObservable.map(/*以下略*/)
).subscribe());
擬似コードという言い訳を使って、割りと適当に書いてるけどそのあたりはスルーしてください。
SB69早く観ないと・・・。