2017-02-13 3 views
0

アイトラッカーから非同期にデータを取得し、関心のある人が購読して最新のアイトラッキングイベントのストリームを取得できるPublishSubjectを提供するサービスを実装しました。GUIスレッドに非同期的に計算されたデータを伝播する

(視線追跡が表示されているものの情報がなくても、かなり役に立たないので)私のGUIのスレッドにこれらのイベントを取得すると、GUIが原因で遅れないようにどのように十分に受信したイベントを絞る方法ですについて私は見当もつかない何スレッドをブロックします。

誰かがRxJavaを使ってそれを行う方法のヒントを教えてもらえますか?

+0

UIの基本的な設計は、処理を行うバックグラウンドスレッドを持つことです。UIスレッドはアップデートを受け取ります。 – efekctive

+0

テクノロジに関する詳細情報:Swingアプリケーションですか? javafx?またはアンドロイド? –

+0

おそらくJavaFXが使用されます。 –

答えて

1

反応性の拡張機能は、スケジューラと呼ばれるものを提供します。それらは、ストリームが、それらが生成するか、またはアイテムを観察するスレッドを変更するようにストリームに指示する。 subscribeOnオペレータを通じて設定することができます。プロデューサはそのストリームを変更して、プロデューサがそのアイテムを発行する(つまり、サブスクライバでonNextメソッドを呼び出す)か、observeOnというオペレータによって指定されたスケジューラでの監視作業をスケジュールするようストリームに指示します。

getSomeObservable() // Observable does its work on computation scheduler 
    .observeOn(Schedulers.io()) // instructs to switch every afterwards operator to observe items on io scheduler 
    .map(...) // this callback is called on a thread provided by io scheduler 
    .filter(...) // and this as well 
    .observeOn(Schedulers.newThread()) // switch to new thread scheduler 
    .doOnNext() // new thread 
    .subscribeOn(Schedulers.computation()) // instructs to produce items on computational scheduler 
    .subscribe(...) // still scheduling this task to new thread scheduler 

は通常、RXのためのサポートのいくつかのレベルのフレームワークUIスレッド上で作業を行い、いくつかのスケジューラの実装を持っている...例えばAndroidのは、あなたの中で、あなたが探している正確に何であるAndroidSchedulers.mainThread()を提供するライブラリを持っていますフレームワーク

0

... subscribeOn経由で、計算を移動したりIOを他のスレッドにブロックすることができます。データの準備ができたら、あなたは確認することができ、それらはobserveOn

経由フォアグラウンドまたはGUIスレッドで処理
関連する問題