将异步计算的数据传播回GUI线程

时间:2017-02-13 16:17:40

标签: java multithreading rx-java rx-java2

我实现了一个从eyetracker异步获取数据的服务,并提供了一个PublishSubject,任何有兴趣的人都可以订阅以获取最新的eyetracking事件流。

我不知道如何将这些事件发送到我的GUI线程中(因为没有显示内容的信息,eyetracking非常无用)以及如何限制接收到的事件,因此GUI不会因为阻止线程。

有人可以使用RxJava向我提示如何做到这一点吗?

2 个答案:

答案 0 :(得分: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有一定程度支持的框架有一些Scheduler实现,可以在UI线程上执行... Android例如有一个提供AndroidSchedulers.mainThread()的库,这正是你要找的,只有你的框架

答案 1 :(得分:0)

  

...您可以通过移动计算或阻止IO到其他线程   subscribeOn。数据准备好后,您可以确保它们获得   通过observeOn

在前台或GUI线程上处理