此代码
public class ConnectObs {
public static void main(String[] args) {
Observable<Integer> intsObservable = Observable.just(1, 2);
intsObservable = intsObservable.share();
intsObservable.subscribe(s->System.out.println("A " + s));
intsObservable.subscribe(s->System.out.println("B " + s));
intsObservable = Observable.create(s -> {
s.onNext(1);
s.onNext(2);
});
intsObservable = intsObservable.share();
intsObservable.subscribe(s->System.out.println("C " + s));
intsObservable.subscribe(s->System.out.println("D " + s));
}
}
产生A,B和C的结果。但不是D - 为什么会这样?
以下结果:
A 1
A 2
B 1
B 2
C 1
C 2
答案 0 :(得分:2)
Observable.just
与您的自定义Observable(不是安全构建的)之间的重要区别在于您没有完成流,因此当{C
订阅仍处于活动状态时D
1}}订阅发生,所以D
只是等待更多未发生的排放。
您的创作应如下所示:
Observable.<Integer> create(s -> {
s.onNext(1);
s.onNext(2);
s.onCompleted();
})
//prevent MissingBackpressureException
.onBackpressureBuffer();
为了对订阅者更友好,您可以添加unsubscribe
个检查:
Observable.<Integer> create(s -> {
s.onNext(1);
if (!s.isUnsubscribed())
s.onNext(2);
if (!s.isUnsubscribed())
s.onCompleted();
}).onBackpressureBuffer();