我想@订阅一个由ScheduledFuture创建的Runnable中的方法,这样我就可以从另一个线程发出它是否运行的信号。由于ScheduledFuture会在将来某个时间创建该对象,因此@Subscribe侦听器没有范围来接收我的事件。所以,我想知道一个事件在公共汽车中逗留多久,等待听众收听?实际的pub-sub同步发送/接收事件还是会在超时之前在队列中持续一段时间?活动在事件总线中生活多久?
谢谢。
我想@订阅一个由ScheduledFuture创建的Runnable中的方法,这样我就可以从另一个线程发出它是否运行的信号。由于ScheduledFuture会在将来某个时间创建该对象,因此@Subscribe侦听器没有范围来接收我的事件。所以,我想知道一个事件在公共汽车中逗留多久,等待听众收听?实际的pub-sub同步发送/接收事件还是会在超时之前在队列中持续一段时间?活动在事件总线中生活多久?
谢谢。
番石榴的EventBus
不提供粘性事件。此外,由于EventBus
的设计,它不像它可以扩展它来实现这样一个粘性设计那样简单,因为很多内部都是包私有的(例如,发现注册对象上的哪些方法是逻辑的注释Subscribe
并将它们映射到适当的事件类型)。
我确实认为还有其他一些图书馆可以提供此功能,例如GreenRobot的活动巴士(https://github.com/greenrobot/EventBus),但是如果没有引入新的图书馆,您必须从头开始构建它。
我使用的替代方案是RxJava的Observables
和replay(1)
运算符,因此订阅observable将始终使用最后一项立即调用订阅回调,但它不是插入替换。
同上RxJava。正是我想要建议的。那个图书馆改变了我的生活,甚至超过了Google Guava。它有一条学习曲线,但反应式编程确实擅长解决这些问题。 – tmn
听起来好像你正在寻找在新用户注册时重播的“粘性”事件。 Guava的活动巴士不会默认提供此功能。我是否正确理解您的用例? –
听起来和我要找的完全一样。 –