我实现了一个从eyetracker异步获取数据的服务,并提供了一个PublishSubject,任何有兴趣的人都可以订阅以获取最新的eyetracking事件流。
我不知道如何将这些事件发送到我的GUI线程中(因为没有显示内容的信息,eyetracking非常无用)以及如何限制接收到的事件,因此GUI不会因为阻止线程。
有人可以使用RxJava向我提示如何做到这一点吗?
答案 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线程上处理