在以下代码中,在完成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();
}
});
答案 0 :(得分:3)
您可以保存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();
}
});
答案 1 :(得分:3)
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();
}
答案 2 :(得分:2)
简短的回答是,您没有理由明确取消订阅,因为观察链已经完成了取消订阅。您可以通过添加此运算符来自行测试:
.doOnUnsubscribe( () -> System.out.println("Unsubscribed") )
答案 3 :(得分:0)
如果要立即取消订阅,只需使用take(1)。在调用take(1)之后,应该使onComplete被调用。
Disposable d =
getObservable()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.take(1)//take the first, then stop emissions
.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();
}
});