web-dev-qa-db-ja.com

RxJava2は、完了またはエラーを呼び出したときにオブザーバブルを自動的に破棄しますか?

RxJavaでの破棄について質問があります。 GithubのRxSwiftドキュメントでこの下の文を見つけました。

シーケンスがcompletedまたはerrorイベントを送信すると、シーケンス要素を計算するすべての内部リソースが解放されます。

シーケンス要素の作成をキャンセルしてリソースをすぐに解放するには、返されたサブスクリプションに対してdisposeを呼び出します。

私が正しく理解していれば、リソース(オブザーバブル)がonCompletedまたはonErrorを呼び出した後に解放されます。

だから問題は、RxJavaはRxSwiftのように同じことをするのですか、それとも自分でdisposeを呼び出す必要があるのですか?

9
Watcharin.s

はい、関連するすべてのリソースは自動的に破棄されます。 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);
}
15
hgrey