创建像这样的Observable时:
public void foo() {
Observable observable = Observable.fromCallable(() -> {
bar();
return "";
})
.doOnSubscribe(disposable -> System.out.println("onSubscribe"))
.doOnDispose(() -> System.out.println("onDispose"));
Disposable disposable = observable.subscribe();
disposable.dispose();
}
private void bar() {
System.out.println("bar");
}
调用 doOnSubcribe
,未调用doOnDispose
。
为什么?
答案 0 :(得分:15)
您需要使用doFinally()
运算符。
doOnDispose()
有一个非常狭窄的用例,其中明确处理了observable。在您的示例中,observable由onComplete()
“自然地”终止。当你调用dispose()
时,observable就完成了,什么都不会发生 - 处理完成的observable没有效果。