在調試rxJava網絡電話在一個應用程序停止rxJava觀察到鏈執行我碰到這樣一種情況,如果我們dispose
或clear
處置對象由observables
那麼只有第一observable
鏈的訂閱返回得到處理而不是其他鏈接observables
由flatMap
。上佈置
看一看下面的演示代碼片段:
CompositeDisposable testCompositeDisposal = new CompositeDisposable();
private void testLoadData() {
Disposable disposable = Observable.create(sbr -> {
for (int i = 0; i < 5; i++) {
Thread.sleep(3000);
Log.w("Debug: ", "First: " + i);
sbr.onNext(true);
}
sbr.onComplete();
}).subscribeOn(Schedulers.io()).flatMap(value -> Observable.create(sbr -> {
for (int i = 0; i < 5; i++) {
Thread.sleep(3000);
Log.w("Debug: ", "Second: " + i);
sbr.onNext(true);
}
sbr.onComplete();
})).doOnNext(value -> {
Log.w("Debug: ", "doONNext");
}).doOnDispose(()-> {
Log.w("Debug: ", "doOnDispose: observable has been disposed");
}).subscribe();
testCompositeDisposal.add(disposable);
}
@Override
public void onStop() {
super.onStop();
testCompositeDisposal.clear();
}
輸出:
W/Debug:: First: 0
W/Debug:: doOnDispose: observable has been disposed // I dispose Observable chain here.
W/Debug:: First: 1
W/Debug:: First: 2
W/Debug:: First: 3
W/Debug:: First: 4
正如你可以看到上面的日誌輸出,當我處理給rxJava觀察到鏈只有第一可觀察的停止發射物品。
我想停止所有被鏈接的觀測值。
解決此問題的慣用方法是什麼?
所有這些Observable.create東西看起來很evilish :-)。首先:你需要添加平面圖的可觀察物到你的複合一次性物品上。第二:不要在任何地方創建()。這不是rxjava的設計方式。使用.timeout/.timer/.delay的Observable.just(...)或Observable.range()效果很好。 –
@EmanuelSeibold這只是我實現的一個演示。我在這裏使用計時器來模擬網絡通話。我已經使用doOnSubscribe來獲得一次性平面地圖可觀察。它拋出奇怪的例外。 – chandil03