我有以下代码:

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()中的doOnUnsubscribe()更改,计数器将减少。

最佳答案

doAfterTerminate()在由于onErroronComplete而终止的情况下有效,但不能取消订阅。

取消订阅时,也可以使用doFinally或将doAfterTerminate()doOnCancel组合来获得呼叫。

有关差异的说明,请参见this answer

关于android - RXJava取消订阅()之后的单,是否不调用doAfterTerminate()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49380358/

10-10 22:21