2

Модель Controller + EventBus работает очень хорошо в Android, но события по стрельбе повсюду становятся действительно грязными. Если контроллер получает запрос на загрузку одних и тех же данных несколько раз, легко начать загрузку в первый раз и игнорировать последующие запросы во время его загрузки и начать прослушивание будущих запросов на загрузку после того, как будет сделана загрузка. Как я могу сделать это с помощью RxJava (MVP предъявителей?)Как заменить шаблон EventBus на презентаторы RxJava?

Сценарий

У меня есть синглтон ColorModel в моем андроид приложение, которое загружает мой любимый цвет (from multiple sources), как Observable<String> (String == hexcode).

Мои ColorPresenter захваты в ColorModel, преобразующие String hexcode в Color объект, который может быть отображен в ColorView.

Это основные части моей логики:

  1. Observable<String> getColor() (от ColorModel)
  2. Observable<Color> getColorForView() (от ColorPresenter)
  3. subscribe()ColorView)

Проблемы

  • # 1 создается при каждой подписке. Если у меня есть несколько докладчиков, вызывающих # 1, это очень расточительно. Я не хочу, чтобы этот шаг повторялся (инициировался только при первом вызове, а затем кешировался после).
  • Когда я отменил подписку в течение onStop(), # 2 отменил (желаемый), но эта отмена писем пузыри до # 1 тоже отменяется (не требуется).
+0

Вы должны указать нам свой код. Просто описать это недостаточно. – Enigmativity

+0

Также первая проблема действительно не кажется большой проблемой - насколько дорогостоящим является дорогостоящее? – Enigmativity

+0

@ Энигматичность притворяется, что это очень дорогостоящий вычислительный процесс (я не загружаю любимый цвет, это упрощенная версия) – ZakTaccardi

ответ

0

Вы должны взглянуть на оператора cache. Вы можете использовать его и хранить ссылку на наблюдаемые где-нибудь (например, в случае ConnectableObservable).

Будьте осторожны, потому что у вас нет возможности отказаться от подписки на наблюдаемые, которые были созданы с помощью оператора cache. Но в вашем случае это то, что вы хотите, потому что отмена подписки на # 2 больше не влияет на жизненный цикл №1.

Смежные вопросы