2017-02-12 9 views
1

Androidの状態の変更(向きの変更など)や非同期のプラットフォームイベント(プッシュ通知イベントなど)を扱うときに、RxJavaのサブスクリプションを扱うためのエレガントな方法はありますか?AndroidでRxJavaの購読を優雅に処理するには?

私はこれまでのようなことを処理するためにEventBusを使用していましたが、可能であれば(EventBusを必要とせずに)RxJavaに完全に移行したいのですが、何とかEventBusアーキテクチャーがもっと良く見えますこれらのシナリオを処理するために、特にAndroidプラットフォームのイベントを処理する場合は、必要に応じて登録解除してください。我々はまだフラグメント/アクティビティのライフサイクルを超えたサブスクリプションを永続化する方法を必要と思われるだけでRxJavaで

(どちらかローダー留保断片アプリケーションキャッシュなどでは、他のものがありますか?)これらのすべてはかなりの余分な作業と操作のような感じです。ここではいくつかの例を使用するCompositeSubscription

+0

イベントバスはどのようにエレガントに解決しますか? – yosriz

答えて

0

private CompositeSubscription subscriptions = new CompositeSubscrition(); 

public void someSubscribe() { 
    subscriptions.add(Observable.just(null).subscribe(someNull -> doSmth()) 
} 

@Override 
public void onPause() { 
    subscriptions.clear() //Here all subscriptions, that were added to composite subscription, will unsubscribe 
    super.onPause() 
} 
+0

私はCompositeSubscriptionsがライフサイクルを意識しているとは思わない?または、上記のシナリオ(非同期イベントや設定変更など)でどのように動作するか説明してください。 –

0

あなたはバスオンRXとEventBusを置き換えることができます。次に、シングルトン科目を使ってイベントを公開する必要があります。その場合、サブジェクトは「ホット」オブザーバブルなので、サブスクリプションを保持する必要はありません。つまり、いつでも購読/購読を解除でき、それでもイベントを生成することができます。 (再)サブスクリプションの時点で何が起こるかは、Subject typeによって決まります。

イベントバス駆動型アーキテクチャから完全に離れたい場合は、Observables(または他のオブジェクト)を構成変更の間に保持するための「銀色の弾丸」がないことを受け入れます。保持されたフラグメント、ローダー、保持されるプレゼンター、シングルトン、いくつかのライブラリーなどを使用できます。特定のケースや個人の好みによって異なります。

関連する問題