Когда SyncAdapter запускает синхронизацию на Android?

Скажем, мое приложение реализует функциональность SyncAdapter и не определяет периодические синхронизации. Когда синхронизация произойдет в таком сценарии? Первый сценарий, о котором я могу думать, – это локальное изменение контента ContentProvided / database. Что происходит с изменениями в сервере? Как SyncAdapter узнает об этом?

Solutions Collecting From Web of "Когда SyncAdapter запускает синхронизацию на Android?"

Если у вас нет периодической настройки синхронизации, синхронизация произойдет, если ваш код явно вызывает ContentResolver.requestSync(Account account, String authority, Bundle extras) с вашей учетной записью и полномочиями.

Кроме того, если ваш ContentProvider вставляет или обновляет или удаляет функции, вызовите ContentResolver.notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork) , если bool syncToNetwork имеет значение true (по умолчанию), оно также инициирует синхронизацию. Здесь короткая задержка, чтобы гарантировать, что пакет изменений базы данных вызывает только одну синхронизацию, а не одну замену. Обратите внимание, что ваш код должен вызывать notifyChange потому что это notifyChange что Android сигнализирует, как ваш пользовательский интерфейс будет обновляться после того, как контент, который отражает пользовательский интерфейс, был изменен.

Если база данных сервера изменяется, ваше приложение не будет знать, потому что синхронизация не происходит. Два варианта:

  1. Используйте периодическую синхронизацию. Это будет более чистым, если ваш API-интерфейс API реализует etags или if-modified-since http headers для фильтрации синхронизируемых данных, поэтому только обновления снижаются.
  2. C2DM (Cloud 2 Device Messaging) По сути, push-уведомление для Android. Требуется несколько компонентов сервера. Вы привязываете идентификатор устройства к учетной записи на сервере и, когда сервер изменяется, он должен явно отправить сообщение на устройство, чтобы сообщить ему об обновлении. Это настраиваемая работа с кодом на сервере для поддержки Android специально, но как только вы инвестируете время, это здорово. C2DM – это то, как Android получает gmail для отображения на вашем устройстве через 10 секунд после того, как он поступит в ваш почтовый ящик, а не на следующей 10-минутной периодической синхронизации. Это также более эффективно с аккумуляторами, поскольку вы только включаете радио и синхронизируете, когда знаете, что есть новые данные.