2017-02-13 19 views
0

我實現了一個服務,它異步地從eyetracker中提取數據並提供PublishSubject,任何感興趣的人都可以訂閱以獲取最新的eyetracking事件流。將異步計算的數據傳播回GUI線程

我不知道的是如何將這些事件放到我的GUI線程中(因爲eyetracking是沒用的,沒有正在顯示的信息是沒用的)以及如何扼制接收到的事件足夠讓GUI不會因爲阻塞線程。

有人可以給我一個關於如何使用RxJava做到這一點的提示嗎?

+0

基本的UI設計是有一個後臺線程來處理和UI線程拿起更新 – efekctive

+0

你必須提供更多關於技術的信息:它是一個Swing應用程序嗎? JavaFX的?或android? –

+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線程處理