2017-02-13 5 views
0

Я реализовал службу, которая асинхронно извлекает данные из eyetracker и предоставляет PublishSubject, чтобы любой, кто заинтересован, мог подписаться, чтобы получить поток последних событий для наблюдения за глазами.Распространение асинхронно вычисляемых данных обратно в поток GUI

Что я не имею в виду, так это то, как получить эти события в мой поток графического интерфейса (так как просмотр eyetracking довольно бесполезен без информации о том, что отображается) и как достаточно дросселировать полученные события, чтобы графический интерфейс не отставал, потому что блокировки потока.

Может кто-нибудь дать мне подсказку, как это сделать с помощью RxJava?

+0

Основной дизайн пользовательского интерфейса должен иметь фоновый поток для обработки, а поток пользовательского интерфейса выбирает обновления. – 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 

Обычно каркасы с определенным уровнем поддержки гх есть реализация планировщика, который выполняет работу по UI нити ... Android, например, есть библиотека, которая обеспечивает AndroidSchedulers.mainThread() это именно то, что вы ищете, только в вашем framework

0

... Вы можете перемещать вычисления или блокировать IO в какой-либо другой поток через subscribeOn. После того, как данные будут готовы, вы можете убедиться, что они получают обработанную на переднем плане или GUI нить через observeOn

Смежные вопросы