RxJava2在调用完成或错误时是否会自动处置observable?

Wat*_*n.s 7 java rx-java rx-java2

我对RxJava的处理有疑问.我在Github上的RxSwift文档中找到了这个句子.

当序列发送completederror事件时,将释放计算序列元素的所有内部资源.

要立即取消序列元素和免费资源的生成,请在返回的订阅上调用dispose.

如果我理解正确,资源(可观察的)将在他们打电话onCompleted或之后被释放onError.

所以问题是,RxJava是否像RxSwift一样做,或者我需要自己调用dispose?

谢谢

hgr*_*rey 14

是的,所有相关资源将自动处理.为了说明使用RxJava 2运行以下测试:

boolean isDisposed = false;

@Test 
public void testDisposed(){
    TestObserver<Integer> to = Observable.<Integer>create(subscriber -> {
        subscriber.setDisposable(new Disposable() {

            @Override
            public boolean isDisposed() {
                return isDisposed;
            }

            @Override
            public void dispose() {
                isDisposed = true;
            }
        });
        subscriber.onComplete();
    }).test();

    to.assertComplete();
    assertTrue(isDisposed);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果它自动释放,为什么不调用 doOnDispose() ? (2认同)