我认为将一个观察者实例与一些可观察者分享是错误的。 例如
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()会被调用一次,所以可能是不可接受的。
但是我找不到任何关于此的文档。 所以,我想知道是否有任何案例可以与一些观察者分享一个观察者。
答案 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