Альтернативы SyncAdapter

Я думаю, что его хорошо известно, что в списке наихудших документированных тем SyncAdapter сияет ярким, как алмаз! согласно http://udinic.wordpress.com/2013/07/24/write-your-own-android-sync-adapter/ SyncAdapter приносит 4 основных преимущества: A) Эффективность батареи B) Интерфейс C) Знание контента D) Механизм повтора;

если в любом случае необходимо синхронизировать базу данных SQL с удаленной SQL-базой данных, а не требуется ни одно из этих преимуществ, какие существуют другие альтернативы **? ** ее легко управлять сервис между БД с помощью php, я сделал это для загрузки части процесса синхронизации, но для загрузки я чувствую себя глупо, если я использую метод заполнения запроса, в ближайшее время удаленный db может стать большим и большим. Единственное решение мне приходит в голову написать мою собственную активность/службу синхронизации, но я не знаю, как получить доступ к последней дате обновления SQLite db/table (кроме указания _date в каждой таблице), чтобы проверить, нужно ли синхронизировать еще раз? Я чувствую, что моя голова находится между двумя местами!

Ответ 1

Вы смешиваете проблему. 1- Вам действительно нужно использовать адаптер синхронизации??? Поэтому, если да, у вас будет вызов Sync для каждой таблицы, и нет необходимости сохранять последнюю дату вызова. Android сделает это за вас. Просто настройте таймеры синхронизации правильно 2- другое решение - сделать простую AsyncTask и выполнять свою работу здесь. (Например, если вам нужно делать это только один раз в неделю)

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

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

Ответ 2

Возможно, вы захотите рассмотреть эту статью:

https://www.bignerdranch.com/blog/choosing-the-right-background-scheduler-in-android/

Это дает понять, насколько оптимальным выбором является синхронизатор из-за меньших удобных параметров, когда нужно хорошо использовать аккумулятор и выходить в сеть.

Я не рекомендую Asyntask по следующим причинам: http://blog.danlew.net/2014/06/21/the-hidden-pitfalls-of-asynctask/

Если синхронизатор действительно не работает для вас, рекомендации по использованию Android, которые предлагают использовать IntentService и WakefulBroadcastReceiver с частичным блокированием слежения при выполнении длительных операций. В нем говорится, что "фреймворк Android предлагает несколько классов, которые помогут вам выполнять операции с загрузкой на отдельный поток, который работает в фоновом режиме. Наиболее полезным из них является IntentService". https://developer.android.com/training/run-background-service/index.html https://developer.android.com/training/scheduling/wakelock.html

должна быть какая-то правда, так как они ее написали.

Ответ 3

Android Jetpack включает в себя WorkManager, который является допустимой альтернативой синхронизаторам. Основные характеристики:

  • Запланируйте работу в соответствии с доступностью сети или состоянием зарядки устройства
  • Обратная совместимость до API 14
  • Обеспечивает выполнение задачи, даже если приложение или устройство перезагружается
  • Предназначен для отложенных задач (например, периодическая синхронизация данных приложения с сервером)

В качестве альтернативы, чем-то похожим является библиотека Android-Job от Evernote