我对RxJava的处置有疑问。我在Github上的RxSwift文档中找到了下面的句子。

当序列发送completederror事件时,将释放所有计算序列元素的内部资源。
要立即取消生成序列元素和释放资源,请在返回的订阅上调用dispose。

如果我正确理解,资源(可观察对象)将在调用onCompletedonError后被释放。
所以问题是,RxJava是否执行与RxSwift相同的操作,还是我需要自己调用该处置?

最佳答案

是的,所有相关资源将自动处置。为了说明使用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);
}

07-21 20:06