在取消订阅()后,RXJava单,doAfterTerminate()没有被调用?

时间:2018-03-20 09:21:43

标签: android rx-java rx-android

我有以下代码:

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}}更改,则会减少计数器。

1 个答案:

答案 0 :(得分:3)

由于doAfterTerminate()onError

onComplete将终止,但不会取消订阅。

您可以使用doFinally或将doAfterTerminate()doOnCancel结合使用,以便在取消订阅时接听电话。

有关差异的解释,请参阅this answer

相关问题