Я все еще новичок в RxJava и использую его в приложении для Android. Я прочитал тонну по этой теме, но все еще чувствую, что что-то упускаю.
У меня такой сценарий:
У меня есть данные, хранящиеся в системе, доступ к которым осуществляется через различные сервисные соединения (AIDL), и мне нужно получить данные из этой системы (может произойти 1-n количество асинхронных вызовов). Rx очень помог мне в упрощении этого кода. Однако весь этот процесс обычно занимает несколько секунд (более 5 секунд +), поэтому мне нужно кэшировать эти данные, чтобы ускорить работу собственного приложения.
Требования на этом этапе:
Первоначальная подписка, кеш будет пустым, поэтому нам нужно подождать необходимое время для загрузки. Ничего страшного. После этого данные следует закэшировать.
Последующие загрузки должны извлекать данные из кеша, но затем данные должны быть перезагружены, и кеш диска должен оставаться за кулисами.
Проблема: у меня есть два Observable - A и B. A содержит вложенные Observables, которые извлекают данные из локальных сервисов (здесь много чего происходит). B намного проще. B просто содержит код для извлечения данных из дискового кеша.
Необходимо решить: а) Вернуть кэшированный элемент (если он кэширован) и продолжить перезагрузку дискового кеша. б) Кэш пуст, загрузите данные из системы, закешируйте их и верните. Последующие вызовы возвращаются к «а».
Некоторые люди рекомендовали несколько операций, таких как плоская карта, слияние и даже объекты, но по какой-то причине у меня возникли проблемы со связью точек.
Как я могу это сделать?