運行下面的代碼subscribeOn
排除repeatWhen不起作用subscribeOn
PublishSubject<Void> repeatSubject = PublishSubject.create();
Observable.
<Integer>create(subscriber -> {
System.out.println("1");
subscriber.onNext(1);
subscriber.onCompleted();
}).
//subscribeOn(Schedulers.computation()).
repeatWhen(h -> h.flatMap(nothing -> repeatSubject)).
subscribe();
repeatSubject.onNext(null);
版畫,一如預期,兩個 '1'。
但是,因爲只有我取消註釋subscribeOn
,所以只打印了one'1'。必須是repeatWhen
不會重新訂閱可觀察。爲什麼?
P.S.感謝好解釋yosriz。所以現在問題不是'爲什麼',而是'如何'。我怎麼能從主線程重複觀察,安排在另一個線程?
P.P.S.以下修改仍然打印一個'1'。
BehaviorSubject<Void> repeatSubject = BehaviorSubject.create();
Observable.
<Integer>create(subscriber -> {
System.out.println("1");
subscriber.onNext(1);
subscriber.onCompleted();
})
.subscribeOn(Schedulers.computation())
.repeatWhen(new Func1<Observable<? extends Void>, Observable<?>>() {
@Override
public Observable<?> call(Observable<? extends Void> observable) {
return observable.zipWith(repeatSubject, new Func2<Void, Void, Object>() { // called on main thread
@Override
public Object call(Void aVoid, Void aVoid2) {
return new Object(); // never called !
}
});
}
})
.subscribe();
repeatSubject.onNext(null); // called on main thread
感謝解釋!但是,我怎麼能在主線程上重複另一個線程上的可觀察性? – Alexey
什麼是不完全的工作不工作:( – Alexey
?我測試了它 – yosriz