有没有一个观察者会被RxJava中的一些观察者共享?

时间:2016-06-24 11:47:06

标签: rx-java

我认为将一个观察者实例与一些可观察者分享是错误的。 例如

Observable o1 = Observable.interval(1, TimeUnit.MILLISECOND);
Observable o2 = Observable.interval(1, TimeUnit.MILLISECOND);

Observer observer = new Observer() { ... }

o1.subscribe(observer);
o2.subscribe(observer);

由于观察者的onCompleted()会被调用一次,所以可能是不可接受的。

但是我找不到任何关于此的文档。 所以,我想知道是否有任何案例可以与一些观察者分享一个观察者。

1 个答案:

答案 0 :(得分:1)

按照设计,只要您订阅了observable,就会创建一个观察者,然后一旦您的项目被发出,您的观察者就会取消订阅并将其删除。

你可以做的是避免使用Observable并使用Relay,它将永远不会取消订阅观察者,因为它不会提供onComplete回调。

    /**
 * ReplayRelay it works just like hot observables, once that an observer subscribe, the Relay will replay all items already emitted
 * to another observer.
 * it should return 1,2,3,4,5 for both observers.
 */
@Test
public void testReplaytRelaySharingObserver() {
    ReplayRelay<String> relay = ReplayRelay.create();
    Subscription subscription = relay.subscribe(result -> System.out.println("Observer1:" + result));
    relay.call("1");
    relay.call("2");
    relay.call("3");
    relay.subscribe((Observer<? super String>) subscription);
    relay.call("4");
    relay.call("5");
}

您可以在此处查看其他相关示例https://github.com/politrons/reactive/blob/master/src/test/java/rx/relay/Relay.java