FlatstackSchool / android-examples

Frequently using features
1 stars 1 forks source link

Observable with multiple subscribers #14

Open IlyaEremin opened 8 years ago

IlyaEremin commented 8 years ago

Есть один observable, на который подписаны несколько подписчиков. При отписке любого из них observable должен останавливаться. Смысл в том, чтобы создавать в одном месте observable и в других классах подписываться на его lifecycle, таким образом добиться модульности. Пример: начинается загрузка и надо отображать диалог, при отмене которого загрузка прекращается. Также надо по завершению загрузки отображать данные. Получается 2 подписчика - экран для отображения и диалог. Можно это сделать все внутри одного Subscription subs = observable.doOnEach(../* закрыть диалог */.).subscribe( /* отобразить данные */...) и добавить dialog.setOnDismissListener(() -> subs.unsubscribe()); но если действия в подписчиках не самые тривиальные, это превращается в большую кучу. И хотелось бы просто отдать lifecycle ивенты в диалог, чтобы он сам решал когда и что с собой делать. @RuslanZakirov @RamilGabdrakhmanov ваши мысли господа.

RuslanZakirov commented 8 years ago

Все-таки в терминах rxjava диалог не будет обычным подписчиком. Скорее вьюшкой которая зависит от callback'ов observable. Может есть какой-то конкретный случай, который иллюстрирует неудобство обычного подхода?

IlyaEremin commented 8 years ago

Экран, после ввода логина и пароля появляется диалог ожидания, типа "Соединение с сервером". По закрытию диалога надо отменять запрос. При завершении\фейлу запроса надо закрывать диалог. При завершении запроса надо отображать данные.

Неудобство в том, что если все это встраивать в один observable, то он оч большим становится. Хотелось бы о его коллегах знали в других местах, где это надо и соответственно реагировали.

RuslanZakirov commented 8 years ago

На мой взгляд, не такой уж это и страшно. Если по завершению/фейлу observable нужно много всего делать, то можно все вынести в отдельный метод.

Если я правильно понял идею, то добавив независимых "слушателей" которые сами будут решать, что делать, мы уйдем от функционального к императивному, т.к. добавится состояние.

IlyaEremin commented 8 years ago

Нуок, может я лучше выражу это в коде. Мне пока самом не понятно чем это облегчит жизнь.