私はRxJavaとRxAndroidについて学び始めました。観測者のパターンをRxJavaに置き換えたいと思います。オブザーバーパターンは、Android LocationManagerクラスに似ていますが、登録メソッドと登録解除メソッドがあります。 "observable"クラス(rx.Observableを意味しない)は、独自のスレッド(HandlerThread)で動作し、リスナとそのHandlerオブジェクトのマップを所有し、それぞれのリスナはそのスレッドで(Handler経由で)呼び出されます。私が考えるのは明らかだ。だから問題はRxJavaを使って実装する方法ですか?それは理にかなっていますか? PublishSubjectとSubscriberについて読んだことがありますが、Observableをそのスレッドで実行する方法がわかりません。サブスクライバはObservableを作成せず、独自のスレッドで通知を受け取るだけで登録するため、 "subscribeOn"メソッドを使用したくありません。ご意見ありがとうございます。オブザーバーパターンをAndroidのRxJavaに置き換えてください
答えて
あなたの一般的なアプローチは良い方法です。私はあなたのためにいくつかの側面を肉体的にしましょう。
あなたの観測可能なクラスが、時間とともに変化する値を担っているとしましょう。これまで、オブザーバーを登録すると、オブザーバーの値が変更されたときにオブザーバーに警告が送信されました。色の変化を見ているとしましょう。 (警告:。。未テストコードは、次の私は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()
。
しかし、複数のオブザーバーはどうですか? My Observableはシングルトンなので、ワーカースレッドは1つだけです。私はオブザーバがsubscribeOnメソッドを呼び出すべきではないと思います。私は正しい? – piotrek00
各観測者は最後の行を実行します。 'subscribeOn()'は、スレッド間でデータの転送を行います。 –
- 1. index.phpをhtaccessの書き換えに置き換えてください。
- 2. 空きスペースをAndroidのバイトで置き換えてください
- 3. オブジェクトparamの値をGreasemonkeyに置き換えてください
- 4. バッチをHTMLのファイル名に置き換えてください
- 5. TextViewの単語をスムーススケールに置き換えてください
- 6. ゼロシーケンスを他の値に置き換えてください
- 7. mscorlibを独自のカスタムバージョンに置き換えてください。
- 8. **をSymPyのMath.powに置き換えてください
- 9. pyspark/dataframe:nullを空のスペースに置き換えてください。
- 10. sparkのgroupByKeyをreduceByKeyに置き換えてください
- 11. "\"をC#の "\ /"に置き換えてください
- 12. [X]をtexareaの[Y]に置き換えてください。
- 13. スパンクラスを他のスパンクラスに置き換えてください
- 14. "。"をPythonの<s>に置き換えてください。
- 15. ファイルをシンボリックリンクのシンボリックリンクに置き換えてください
- 16. 軸のループオーバーを放送に置き換えてください。
- 17. ページのjQueryバージョンをGreasemonkeyに置き換えてください
- 18. オブジェクトをMongooseの配列に置き換えてください
- 19. JQueryの変数にスパンを置き換えてください
- 20. パンダのデータフレームNaTをNoneに置き換えてください
- 21. hrefのセクションをjQueryに置き換えてください。
- 22. Cで\ 'を\に置き換えてください。
- 23. 文字列をホスト名に置き換えてください
- 24. ベクトル値を名前に置き換えてください
- 25. jQueryでテキストをhtmlタグに置き換えてください
- 26. DRLとRFをJavaに置き換えてください
- 27. ローカル画像をベースに置き換えてください。
- 28. HTMLをJavaScriptに置き換えてください
- 29. 文字列をgzipファイルに置き換えてください
- 30. GTK + gdk_draw_pixbufをカイロに置き換えてください。
こんにちは、RxJavaはあなたのためのオブザーバーパターンを実装しています。データのストリームを作成してサブスクライブするだけです。オペレーターによって異なる観察可能なものを構成することができます。 RxJavaはスレッディングについて賭けられていません。実際、RxJavaはデフォルトではシングルスレッドです。この本 "Reactive Programming with RxJava"(http://shop.oreilly.com/product/0636920042228.do)をご覧ください。 Androidの例を使って、RxJavaのあらゆる不具合を解説します。 –