У меня есть приложение, в котором пользователи могут получать уведомления по темам, на которые они подписываются. Последовательность действий следующее:Изменение потока RxJava во время его выполнения
- журналы пользователей в
- АРР, регистров на сервер уведомлений
- Пользователей выбирают подписаться/отписаться от различных тем
Я хочу, чтобы все сетевые запросы для сериализации. Если бы я знал, что при инициализации какие именно темы собираются быть подписаны/отписался, я мог бы написать поток, как показано ниже:
loginObservable.subscribeOn(Schedulers.io())
.flatMap(user -> registerApp(appId))
.flatMap(o -> subscribeToTopic("topic1"))
.flatMap(o -> unsubscribeFromTopic("topic2"))
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
Дело в том, что пользователи могут подписаться/отказаться от подписки в любой точке жизненного цикла приложения, возможно, даже прежде чем регистрация будет успешной. Я мог бы сохранить список наблюдаемых и сериализовать все запросы вручную в onComplete()
, но это не звучит очень Rx-ish. Есть ли шанс, что я смогу сделать это более кратким образом? Что-то вроде:
observable = loginObservable.subscribeOn(Schedulers.io())
.flatMap(user -> registerApp(appId))
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
//later
observable.flatMap(o -> subscribeToTopic("topic1"))
.subscribe()
//even later
observable.flatMap(o -> unsubscribeFromTopic("topic2"))
.subscribe()
Нет необходимости 'switchMap' на самом деле, я просто редактировал вопрос заменить 'switchMap' на' flatMap' – mbonnin
Относится ли это к взаимодействию пользовательского интерфейса, которое происходит до того, как приложение зарегистрировано в службе уведомлений? Я думал об использовании ReplaySubject. – mbonnin