确定主题何时没有订阅者

时间:2017-06-14 04:04:10

标签: android rx-java2

我想使用PublishSubject创建广播系统,后台任务将轮询某个端点并使用此Subject定期广播结果。我想在第一个订阅者订阅主题时开始轮询,并在没有更多订阅者时停止轮询。如果新订户订阅,则应继续轮询。

我看到的唯一有用的功能是hasObservers(),但它并不适合我的需求,我想有订阅和取消订阅的回调 - 对于前者我会开始轮询,如果没有说明,如果不再有订阅者,我会停止投票;怎么能实现呢?

1 个答案:

答案 0 :(得分:4)

您可以在主题周围创建一个可以保持计数的包装器,但听起来您的问题可以通过ConnectableObservable来解决。 考虑一下:

Observable<PollData> pollData = Observable.interval(1, TimeUnit.SECONDS)
                         .flatMap(i -> api.pollData())
                         .share();

使用share()运算符使得observable变为ConnectableObservable,它将在第一个观察者订阅它时开始,与后续订阅共享所有排放,并在最后一个观察者取消订阅时自动停止。 阅读更多相关信息here