当像这样创建一个 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
没有被调用。
这是为什么?
最佳答案
您需要使用 doFinally()
运算符。
doOnDispose()
有一个非常狭窄的用例,其中可观察对象被显式处理。在您的示例中,可观察对象通过 onComplete()
“自然地”终止。当您调用 dispose()
时,observable 已完成,什么也不会发生——处置已完成的 observable 没有任何效果。
关于java - 为什么不调用 doOnDispose?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49154069/