Какое решение лучше для syn c приложения в автономном режиме с сервером раз в минуту? - PullRequest
0 голосов
/ 30 января 2020

Я сделал Android приложение, которое использует автономный режим. Также имеется кнопка «Syn c», по нажатию - выполняется синхронизация с сервером (сервер не является базой данных Firebase-службы).

Я хочу сделать один и тот же syn c без этой кнопки один раз минуту, когда мое приложение находится на переднем плане и когда сетевое соединение включено.

WorkManager кажется наилучшим решением для сценария использования, но согласно этой статье минимальный интервал для WorkManager составляет 15 минут.

Другие способы, описанные в этой статье : ForegroundService, AlarmManager и background Thread.

Также я нашел решение Syn c Адаптер

Какой способ был бы наиболее эффективным для данного случая?

PS Я понимаю, что этот сценарий не очень чистый и, вероятно, лучше всего было бы добавить онлайн-режим и переключаться между двумя режимами без частой синхронизации. Но у меня есть несколько причин не делать этого

1 Ответ

0 голосов
/ 04 февраля 2020

Наконец, я выбрал следующий способ:

  1. Чтобы вызвать одноминутный син c Я использовал ThreadPool. Эта дискуссия помогла мне выбрать.
  2. Внутри моего класса приложений я поместил этот код:

    val scheduler = Executor.newSingleThreadScheduledExecutor()
    scheduler.scheduleAtFixedRate({
        .... <My Sync Block> ....
    }, 0, 1, TimeUnit.MINUTES)
    
  3. Чтобы предотвратить получение те же данные с сервера (в моем случае это могут быть огромные фрагменты данных), мне пришлось использовать алгоритм MD-5 на стороне сервера. Он работает следующим образом:

    • сервер отправляет данные с хешами (для каждой части данных)
    • мобильное приложение получает данные и сохраняет как данные, так и хэши в SQLite. В следующей синхронизации c приложение отправляет хэши обратно в запросе
    • сервер просматривает, если запрашиваемые данные имеют разные хэши, и включает в себя только обновленные данные в ответе
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...