我想使用PublishSubject创建广播系统,后台任务将轮询某个端点并使用此Subject定期广播结果。我想在第一个订阅者订阅主题时开始轮询,并在没有更多订阅者时停止轮询。如果新订户订阅,则应继续轮询。
我看到的唯一有用的功能是hasObservers(),但它并不适合我的需求,我想有订阅和取消订阅的回调 - 对于前者我会开始轮询,如果没有说明,如果不再有订阅者,我会停止投票;怎么能实现呢?
答案 0 :(得分:4)
您可以在主题周围创建一个可以保持计数的包装器,但听起来您的问题可以通过ConnectableObservable
来解决。
考虑一下:
Observable<PollData> pollData = Observable.interval(1, TimeUnit.SECONDS)
.flatMap(i -> api.pollData())
.share();
使用share()
运算符使得observable变为ConnectableObservable
,它将在第一个观察者订阅它时开始,与后续订阅共享所有排放,并在最后一个观察者取消订阅时自动停止。
阅读更多相关信息here。