2015-06-17 33 views
0

我想@订阅一个由ScheduledFuture创建的Runnable中的方法,这样我就可以从另一个线程发出它是否运行的信号。由于ScheduledFuture会在将来某个时间创建该对象,因此@Subscribe侦听器没有范围来接收我的事件。所以,我想知道一个事件在公共汽车中逗留多久,等待听众收听?实际的pub-sub同步发送/接收事件还是会在超时之前在队列中持续一段时间?活动在事件总线中生活多久?

谢谢。

+0

听起来好像你正在寻找在新用户注册时重播的“粘性”事件。 Guava的活动巴士不会默认提供此功能。我是否正确理解您的用例? –

+0

听起来和我要找的完全一样。 –

回答

3

番石榴的EventBus不提供粘性事件。此外,由于EventBus的设计,它不像它可以扩展它来实现这样一个粘性设计那样简单,因为很多内部都是包私有的(例如,发现注册对象上的哪些方法是逻辑的注释Subscribe并将它们映射到适当的事件类型)。

我确实认为还有其他一些图书馆可以提供此功能,例如GreenRobot的活动巴士(https://github.com/greenrobot/EventBus),但是如果没有引入新的图书馆,您必须从头开始构建它。

我使用的替代方案是RxJava的Observablesreplay(1)运算符,因此订阅observable将始终使用最后一项立即调用订阅回调,但它不是插入替换。

+1

同上RxJava。正是我想要建议的。那个图书馆改变了我的生活,甚至超过了Google Guava。它有一条学习曲线,但反应式编程确实擅长解决这些问题。 – tmn

相关问题