Скажем, у меня есть 2 наблюдаемых объекта (A & B), которые по сути являются сетевыми вызовами (с использованием «Дооснащения» для предоставления контекста).Понимание потоков данных и нескольких подписчиков (с использованием модификации)
В настоящее время поток приложения выглядит следующим образом:
- & В имеют стартовал примерно в то же время (асинхронно).
- B выполняется 0 или более раз при взаимодействии пользователя
У меня есть 3 различных сценариев, которые я хочу слушать с учетом этих 2 Наблюдаемые/API вызовов.
- Я хочу знать сразу, когда Наблюдаемые завершает
- Я хочу знать сразу, когда Наблюдаемые B завершает
- Я хочу знать, когда оба закончили
Во-первых, является ли это хороший вариант использования для RxJava?
Я знаю, как сделать каждый сценарий индивидуально (используя zip
для последнего), хотя я не знаю, как делать все из них одновременно.
Если я подписываюсь на Наблюдаемый А, начинается А. Если я подписываюсь на B, начинается B. Если A & B полностью, прежде чем я подписаться на zip (a, b), я мог бы пропустить это событие и никогда не увидеть его полностью, не так ли?
Любое общее руководство будет оценено по достоинству. Мои знания RxJava довольно тонкие: P
Удивительно, это было действительно полезно. Не возражаете ли вы развить бит на проблемах параллелизма, в которые я мог бы работать? Если я буду наблюдать их все в одной и той же теме, это все еще проблема? Я думаю, что сначала будет A или B, а затем A + B. – loeschg
Наблюдаемый a, Наблюдаемый b и Наблюдаемый ab (объединенный наблюдаемый из a и b) могут быть выполнены в разных потоках. Таким образом, вызов onCompleted методов не может быть секвенциальным (вопреки rx-контракту). Вы можете прочитать общую переменную с именем «hello» в методе onCompleted. В следующей строке вы снова читаете ту же переменную. Значение может иметь изменение, поскольку другой метод onCompleded из другого наблюдаемого может изменить его. – dwursteisen