如何使用RxJava使用正确的Scheduler观察UI事件?

时间:2015-09-25 06:38:16

标签: reactive-programming rx-java

假设我在任何一种现代UI框架中都有一个通用的“按钮”(我现在正在使用Android,但这个问题几乎与平台无关)。我可以将一个监听器放在这个按钮上来监听点击事件。我的侦听器会收到有关UI线程上的单击事件的通知。从反应的角度来看,这是一个问题,更具体地说,在线程化的背景下。

我可以轻松地为点击事件创建主题。观察者很可能希望在另一个线程上进行处理。但我不能轻易地从.observeOn()运算符中提取(没有黑客或丑陋的变通方法)Scheduler的Worker,以便将事件分派给正确的Worker。

如何从这些点击事件创建一个Observable流,以便该流符合.observeOn()运算符的调度要求?

1 个答案:

答案 0 :(得分:1)

我不清楚这里究竟是什么问题。 ObserveOn将事件放入指定的调度程序,后台可能会在不同的用户的不同线程上结束。如果要确保每个订阅者都将在同一个线程上完全接收事件,则需要一个只有一个备份线程的Scheduler。获取此类Scheduler的最简单方法是包装ExecutorService:

Scheduler s = Schedulers.from(Executors.newSingleThreadedExecutor());

PublishSubject<Event> ps = PublishSubject.create();

Observable<Event> events = ps.observeOn(s);

events.subscribe(...);
events.subscribe(...);

ps.onNext(...);