カスタム Application サブクラスで Rx Observables を作成することは許容されますか? 実行する理由は、アプリケーション内に BehaviorSubject を作成し、サーバーから 10 分ごとに変更を要求することです。この Observable をサブスクライブするすべてのアクティビティまたはフラグメントは、変更の最後の状態のみを取得します。
問題は、このアーキテクチャがアプリケーション ライフサイクルの処理と使いやすさの点で安全であると考えられるかどうかです。
class CustomApplication extends Application {
...
BehaviorSubject<Friends> mFriends = new BehaviorSubject<Friends>;
public void createObservables() {
Observable.create(new Observable.OnSubscribe<Friends>() {
public void call(Subscriber<?> s) {
while(true) {
mFriends.onNext("randomFriendN");
sleep(10sec);
}
}
})
.subscribeOn(Schedulers.newThread())
.subscribe(new Observer<List<NewsCategory>>() {
public void onNext(Friends f) { //empty }
});
}
public BehaviorSubject<Friends> getFriends() {
return mFriends;
}
}
更新: 新しいアクティビティが作成され、データを取得する必要があるたびに、ApplicationContext の BehaviorSubject を取得してサブスクライブできます。Subject は最後に発行された値を発行します。なぜ私はこのようにしたいのですか?たとえば、ニュース アイテムがあり、ニュース フィードをフェッチし、ニュース アイテムの完全なコンテンツをフェッチするバックグラウンド タスクを開始したいとします。この場合、ニュース リストをスクロールしている間にデータのフェッチを開始できます。詳細なアクティビティをクリックすると、次のことができます。すでに取得したものから表示するか、ダウンロードするだけです。