Я разрабатываю приложение для Android с синхронизацией фоновых данных.
В настоящее время я использую RxJava для размещения некоторых данных на сервере через регулярные промежутки времени.
Кроме этого, я хотел бы предоставить пользователю кнопку "принудительная синхронизация", которая немедленно вызовет синхронизацию.
Я знаю, как использовать Observable.interval()
для перемещения данных через регулярные промежутки времени, и я бы знал, как использовать Observalbe.just()
для форматирования того, что принудительно, но я хотел бы поставить их в очередь, если так случилось, что один из них запускается во время предыдущее все еще выполняется.
Итак, давайте возьмем пример, когда 1min - это интервал автоматической синхронизации, и пусть говорят, что синхронизация длится 40 секунд (я больше преувеличиваю здесь, чтобы сделать более легкую точку). Теперь, если случайно пользователь нажимает кнопку "force", когда автомат все еще работает (или наоборот - автоматические триггеры, когда принудительный один все еще запущен), я хотел бы поставить в очередь второй запрос синхронизации, чтобы идти так же, как и первый заканчивается.
Я нарисовал это изображение, которое может показаться ему более перспективным:
Как вы можете видеть, автоматический запуск (с помощью некоторых Observable.interval()
), а в середине синхронизации пользователь нажимает кнопку "force". Теперь мы хотим дождаться завершения первого запроса и затем снова начать принудительный запрос.
В какой-то момент, когда принудительный запрос запущен, новый автоматический запрос был снова запущен, что только добавило его в очередь. После того, как последний был завершен из очереди, все останавливается, а затем автоматический запуск запланирован немного позже.
Надеюсь, что кто-нибудь может указать мне, чтобы исправить оператора, как это сделать. Я пробовал с Observable.combineLatest()
, но список очередей был отправлен с самого начала, и когда я добавил новую синхронизацию в очередь, она не продолжилась, когда предыдущая операция была завершена.
Любая помощь приветствуется, Дарко