2017-09-21 11 views
1

私はRx Javaサブスクリプションとオブザーバブルを頻繁に使用するプロジェクトに取り組んでいます。私は彼らを処分するのがベストプラクティスであると思っていました。現在のところ、doOnUnsubscribe()関数のサブスクリプション/オブザーバブルだけを無効にしているだけでなく、takeUntil()PublishSubjectに設定してオブザーバブルの接続を解除するだけです。これは、これらの参照をクリーンアップする適切な方法ですか、それとも良い方法がありますか?ありがとう!メモリリークを防ぐためにRx SubscriptionとObservableをクリーンアップするにはどうすればいいですか?

答えて

3

サブスクリプションがonCompleted()またはonError()で自然に終了すると、サブスクリプションがクリーンアップされます。あなたが使用している場合:

Subscription sub = observable.subscribe(value -> doSomeStuff()); 

その後、sub.unsubscribe()を呼び出してリソースを解放します。

CompositeSubscriptionを使用して未処理のサブスクリプションをすべて保持することもできます。コンポジットでclear()を実行すると、すべての含まれているサブスクリプションはサブスクライブ解除され、削除されます。あなたがコンポジットからunsubscribe()を受け取ると、含まれているすべてのサブスクリプションはサブスクライブされず、複合サブスクリプション自体はサブスクライブされなくなります。

リソースを無効にすると、特に複数のサブスクリプションがある場合は、必要な処理や必要な処理が行われないことがあります。

+0

オブザーバブルについてはどうですか? –

+1

'Subject 'が別の観測対象に登録されている場合、そのサブジェクトを購読解除することができます。そうでなければ、オブザーバブルは、それがサブスクライブされるまでパッシブオブジェクトです。サブスクリプションなしでは、コールドオブザーバブルは何もしません。熱心な観察者は、あらゆる加入者を見つけようとし、それらにデータを送信するが、それ以外の場合、リソースを消費することはない。 –

関連する問題