0

私はRxJavaとRxAndroidについて学び始めました。観測者のパターンをRxJavaに置き換えたいと思います。オブザーバーパターンは、Android LocationManagerクラスに似ていますが、登録メソッドと登録解除メソッドがあります。 "observable"クラス(rx.Observableを意味しない)は、独自のスレッド(HandlerThread)で動作し、リスナとそのHandlerオブジェクトのマップを所有し、それぞれのリスナはそのスレッドで(Handler経由で)呼び出されます。私が考えるのは明らかだ。だから問題はRxJavaを使って実装する方法ですか?それは理にかなっていますか? PublishSubjectとSubscriberについて読んだことがありますが、Observableをそのスレッドで実行する方法がわかりません。サブスクライバはObservableを作成せず、独自のスレッドで通知を受け取るだけで登録するため、 "subscribeOn"メソッドを使用したくありません。ご意見ありがとうございます。オブザーバーパターンをAndroidのRxJavaに置き換えてください

+0

こんにちは、RxJavaはあなたのためのオブザーバーパターンを実装しています。データのストリームを作成してサブスクライブするだけです。オペレーターによって異なる観察可能なものを構成することができます。 RxJavaはスレッディングについて賭けられていません。実際、RxJavaはデフォルトではシングルスレッドです。この本 "Reactive Programming with RxJava"(http://shop.oreilly.com/product/0636920042228.do)をご覧ください。 Androidの例を使って、RxJavaのあらゆる不具合を解説します。 –

答えて

1

あなたの一般的なアプローチは良い方法です。私はあなたのためにいくつかの側面を肉体的にしましょう。

あなたの観測可能なクラスが、時間とともに変化する値を担っているとしましょう。これまで、オブザーバーを登録すると、オブザーバーの値が変更されたときにオブザーバーに警告が送信されました。色の変化を見ているとしましょう。 (警告:。。未テストコードは、次の私はRxJavaにObserverパターンを適合させるための同様のコードを使用している)今

PublishSubject<Color> ps1 = new PublishSubject<>(); // your observable class 
Observable<Color> observable = ps1.observeOn(Schedulers.newThread()); 
... 
// handler in another thread 
Subscription sub = observable.subscribeOn(myThreadScheduler).subscribe(myHandler); 

、あなたのハンドラは、myThreadSchedulerで指定されたスレッド上で呼び出されます。あなたの観察をキャンセルすることもできますsub.unsubscribe()

+0

しかし、複数のオブザーバーはどうですか? My Observableはシングルトンなので、ワーカースレッドは1つだけです。私はオブザーバがsubscribeOnメソッドを呼び出すべきではないと思います。私は正しい? – piotrek00

+0

各観測者は最後の行を実行します。 'subscribeOn()'は、スレッド間でデータの転送を行います。 –

関連する問題