Home Articles

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

Asked
Viewed 1584 times
5

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

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

如果我理解正确,资源(observables)将在他们调用 onCompletedonError 后被释放 .

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

谢谢

1 Answer

  • 12

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

Related