2017-06-14 89 views
1

我想使用PublishSubject創建廣播系統,後臺任務將輪詢一些端點並使用此Subject定期廣播結果。我想在第一位訂閱者訂閱主題時開始輪詢,並在沒有更多訂閱者時停止輪詢。如果新訂戶訂閱,則應繼續進行輪詢。確定Subject何時沒有訂閱者

我看到的唯一函數有點相關的是hasObservers(),但它並不完全符合我的需求,我想有訂閱和取消訂閱的回調 - 前者如果沒有聲明,我會開始輪詢,以及對於後者,如果沒有更多用戶,我會停止投票;這怎麼可能實現?

回答

2

你可以圍繞一個主題創建一個包裝,以保持計數,但聽起來像你的問題可以通過ConnectableObservable解決。 考慮一下:

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

使用share()操作使得可觀察的成爲ConnectableObservable當第一觀察者訂閱它,將啓動,隨後訂閱分享所有的排放量,並自動停止時,它的最後一個觀察者取消訂閱。 瞭解更多關於它here

+0

太好了,謝謝! – Francesc