RXJava share()无法与Observable.create()一起使用
此代码RXJava share()无法与Observable.create()一起使用,java,rx-java,Java,Rx Java,此代码 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
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));
}
}
Observable.just
和您的自定义Observable(顺便说一句,它不是安全构建的)之间的重要区别在于您没有完成流,因此当D
订阅发生时,C
订阅仍然处于活动状态,所以D
只是等待更多没有出现的排放
您的创建应如下所示:
Observable.<Integer> create(s -> {
s.onNext(1);
s.onNext(2);
s.onCompleted();
})
//prevent MissingBackpressureException
.onBackpressureBuffer();
Observable.<Integer> create(s -> {
s.onNext(1);
s.onNext(2);
s.onCompleted();
})
//prevent MissingBackpressureException
.onBackpressureBuffer();
Observable.<Integer> create(s -> {
s.onNext(1);
if (!s.isUnsubscribed())
s.onNext(2);
if (!s.isUnsubscribed())
s.onCompleted();
}).onBackpressureBuffer();