假设我在任何一种现代UI框架中都有一个通用的“按钮”(我现在正在使用Android,但这个问题几乎与平台无关)。我可以将一个监听器放在这个按钮上来监听点击事件。我的侦听器会收到有关UI线程上的单击事件的通知。从反应的角度来看,这是一个问题,更具体地说,在线程化的背景下。
我可以轻松地为点击事件创建主题。观察者很可能希望在另一个线程上进行处理。但我不能轻易地从.observeOn()
运算符中提取(没有黑客或丑陋的变通方法)Scheduler的Worker,以便将事件分派给正确的Worker。
如何从这些点击事件创建一个Observable流,以便该流符合.observeOn()
运算符的调度要求?
答案 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(...);