RxJava2:第一个订阅的观察者和最后一个未订阅的观察者的PublishProcessor回调

时间:2016-12-07 16:01:10

标签: rx-java rx-java2

我使用PublishProcessor<?>为多个观察者提供服务。有没有办法知道第一个观察者何时获得订阅并且最后一个观察者被处置?

1 个答案:

答案 0 :(得分:4)

不直接,您需要捕获订阅者和消费者:

PublishProcessor<?> pp = ...

AtomicInteger counter = new AtomicInteger();

Action onFirst = ...

Action onLast = ...

Flowable<?> f = pp.doOnSubscribe(s -> {
    if (counter.getAndIncrement() == 0) {
        onFirst.run();
    }
})
.doFinally(() -> {
    if (counter.decrementAndGet() == 0) {
        onLast.run();
    }
})

// use f for subscribe() instead of pp