なにこれ
subscribeOn
, observeOn
について、以前ややこしいなあと思った記憶があるのでかんたんに整理しておきます。
subscribeOn
について
なぜObservable(Cold)の実行スレッドはsubscribeOn
で設定するのか
ColdなObservableはsubscribe
して初めてObservableのイベントを発火します。
つまりColdなObservableにおいては、購読≒イベント実行といえます。
よって、subscribeOn
は、Observableのイベント実行スレッドを決定するという意味になります。
なぜHotのObservableは実行スレッドを変更できないのか
HotなObservableでは、購読の有無にかかわらずObservableがイベントを発行します。
購読前にすでにイベントの実行を行っているため、subscribeOn
ではObservableの実行スレッドを変更することは出来ません。
observeOn
について
なぜsubscribe内の実行スレッドはobserveOn
で設定するのか
一方で、observeOn
は、「Observerが」どこでイベントを観測するかという意味になります。
ObserverとObservableの意味をごちゃごちゃにしないことがポイントかと思います。
Observableはイベントを発行するもので、Observerは発行されたイベントを副作用として処理するものです。すなわち、雑な言い方をすると、Observerはsubscribe内で、イベントを観測し、UIの変更などを行う部分になります。
よって、observeOn
はsubscribe
内のObserver
実行スレッドを決定すると考えることが出来ます。