在下面的代码中,在完成unSubscribe
后,如何以及在何处放置Observable
以明确地取消订阅onComplete
?
getObservable()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<Boolean>() {
@Override
public void onCompleted() {
doSomething();
}
@Override
public void onError(Throwable e) {
thereIsError();
}
@Override
public void onNext(Boolean status) {
updateView();
}
});
你可以保存Disposable
方法返回的subscribe
并在onCompleted
回调中使用它
Disposable d =
getObservable()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<Boolean>() {
@Override
public void onCompleted() {
doSomething();
d.dispose();
}
@Override
public void onError(Throwable e) {
thereIsError();
}
@Override
public void onNext(Boolean status) {
updateView();
}
});
disposables.add(sampleObservable()
// Run on a background thread
.subscribeOn(Schedulers.io())
// Be notified on the main thread
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<String>() {
@Override
public void onComplete() {
// Do some work for completion
}
@Override
public void onError(Throwable e) {
// Do some work for error
}
@Override
public void onNext(String value) {
// Do some work for next
}
}));
并清楚和取消订阅
@Override
protected void onDestroy() {
super.onDestroy();
disposables.clear(); // do not send event after activity has been destroyed
disposables.dispose();
}
简短的回答是,你没有理由明确取消订阅,因为观察者链是这样做的。您可以通过添加此运算符来自行测试:
.doOnUnsubscribe( () -> System.out.println("Unsubscribed") )