2016-03-25 7 views
0

Rxjavaは、observeOnメソッドおよびsubscribeOnメソッドを使用して、観測可能およびサブスクライバのスレッドスケジュールを変更できます。 observeOnとsubscribeOnはliftメソッドを使用して新しいObservableを返します。
リフトメソッドは新しい観測値を作成します。クローンメソッドのように、新しいサブスクライバと新しいOnSubscribeを作成します。Rxjava - OnSubscribeでsubscribeOnのスケジュールを設定する理由

observeOn():新しいOnSubscribeは古いOnSubscribeに新しい加入者にメッセージを送信するよう通知し、新しい加入者はメッセージを受信するとそのスレッドスケジューラを変更します。この後、新しい加入者はメッセージを古い加入者。

subscribeOn():新しいOnSubscribeはスレッドスケジューラを最初に変更し、古いOnSubscribeに通知します。

私の質問は、新しいOnSubscriberから新しいSubscriberがメッセージを受け取ったときに、新しいOnSubscribeのスレッドスケジューラを最初に変更し、observeOn()がそのスレッドスケジューラを変更する理由です。なぜクリエイターがこのように設計したのですか?なぜsubscribeOnとobserveOnのスレッドスケジューラを変更する場所が違うのですか?事前に
おかげ

答えて

0

subscribeOnは、別のスレッド(:サブスクリプション・タイムライフサイクル)にそれを移動することで、サブスクリプションの副作用を扱うことができます。 observeOnでは、放出を別のスレッド(ライフサイクル:ランタイム)に移動することによって放出される各値の観測の副作用を処理できます。これらの2つはライフサイクルの異なるポイントで動作しますが、時には正味の結果は同じです。通話の方向は互いに逆であり、subscribeOnがアップストリームに、observeOnがダウンストリームになります。

+0

新しい加入者がobserveOnのように古いonSubscriberからメッセージを受け取った後にsubscribeOnをスケジューラに変更すると、どうなりますか?つまり、作成者がsubscriberOnを1回だけ設定できる理由ですが、subscribeOnが新しいサブスクライバのスレッドスケジューラを変更した場合、サブスクライバはオブザーバブルのようにスレッドスケジューラを何度も変更することができます。なぜRxjavaはこれをこのように設計していないのですか?サブスクライバのスレッドがスレッドを1回だけ変更するのはなぜですか? – JonsTank

関連する問題