2017-09-27 11 views
8

Androidの観点からこれを求めていますが、これは一般的なRxJavaに当てはまります。RxJavaでCompletable、Single、Maybe、およびTerminating Observablesを廃棄するためのベストプラクティス

ベストプラクティスとして、私の見解は常にさえ短いCompletableSingleMaybe住んでいたと短い順に終了すべきObservableのRxタイプを終了を処分する必要がありますが、ユーザーがビューを閉じた時にはまだ実行されるだろうか? Rxチェーンが終了すると、それは破棄されますが、これは、ビューが閉じられた後でいつか発生する可能性があることを認識しています。

たとえば、HTTP GETを実行しているSingleです。コールは完了しますが、ビューが破棄された後に一時的にガベージコレクションが行われないことがあります。

そしてCompositeDisposableは、長寿命の観点では、このようなDisposable Sを収集するために使用されている場合、私はケアがCompositeDisposableのサイズが無制限増殖を防ぐためにclear()に連れて行かれ、あるいは定期的にこれらのDisposable秒を削除すべきであると思うだろうか?

+0

「完了」を処理するための回答が好きですが、それは以下のようには見えません。 –

答えて

3

またはonDestroyCompositeDisposableを配置して、このような問題を回避することをお勧めします。

6

ベストプラクティスとして、私の見解では、常にベストプラクティスとして、たぶんと観測のRxタイプ

あなたが他の人とコードを共有している場合を終了しても短命Completable、シングルを処分すべきです私はと言うつもりですを処分する必要があります。余分なボイラープレートのように見えますが、次の開発者がサブスクリプションコードにフックして、もはや存在しないコンポーネントにアクセスしようとしないようにします(Fragmentを外した後Contextなど)。

そしてCompositeDisposableは、長寿命の観点では、このような使い捨てを収集するために使用されている場合、私は注意がCompositeDisposableのサイズは無制限増殖を防ぐためにクリアするために撮影した()、またはそれ以外の場合は、定期的にこれらの使い捨てを削除すべきであると思うだろう

私は、rxjava2のCompositeDisposableに状態があることを指摘したいと思います。 dispose()に電話すると、その後に追加されたDisposableは直ちに処分されます。だから、ベストプラクティスとして:

  1. ライフサイクル(onCreate(...)など)の先頭に新鮮なCompositeDisposableを作成
  2. onDestroy(...)dispose()の世話をするので、その時点で、あなたのコールバックが実質的に値を持たないし、ちょうど上に保持していますリソース。
+0

ちょっと考えました。誰かが、新しい[Androidアーキテクチャのライフサイクルコンポーネント](https://developer.android.com/topic/libraries/architecture/lifecycle.html)を使用してライフサイクルを意識した複合使い捨てをしようとしているのだろうかと思います。 – Jon

+0

実際には、誰かがそれを明らかに構築しました:https://github.com/uber/AutoDispose – Jon

関連する問題