我有以下代码:
Single<Item> update(...) {
...
return Single.create(subscriber -> aCall.execute(..) {
public void onResponse(..){
subscriber.onSuccess(..)
}
public void onError() {
if(shouldReset) {
subscriber.unsubscribe();
} else {
subscriber.onError();
}
}
}));
}
调用方法时:
update(..)
.doOnSubscribe(counter++)
.doAfterTerminate(counter--)
.subscribe();
我注意到,如果调用subscriber.unsubscribe();
,计数器永远不会减少。那是为什么?
如果我从doAfterTerminate()
的{{1}}更改,则会减少计数器。
答案 0 :(得分:3)
doAfterTerminate()
或onError
, onComplete
将终止,但不会取消订阅。
您可以使用doFinally
或将doAfterTerminate()
与doOnCancel
结合使用,以便在取消订阅时接听电话。
有关差异的解释,请参阅this answer。