Частота Android SyncAdapter
-
21-12-2019 - |
Вопрос
Я пытаюсь создать SyncAdapter, который следует запускать каждые несколько секунд для быстрой проверки конкретных данных.Я использую следующий код для запуска SyncAdapter
ContentResolver.setIsSyncable(account, CONTENT_AUTHORITY, 1);
ContentResolver.setSyncAutomatically(account, CONTENT_AUTHORITY, true);
и синхронизация срабатывает правильно, однако я заметил, что она вызывается только раз в десять минут.На основе обучения Android http://developer.android.com/training/sync-adapters/running-sync-adapter.html говоря:
Когда доступно сетевое соединение, система Android отправляет сообщение каждые несколько секунд, чтобы держать соединение TCP/IP устройства открытым.Это сообщение также идет в контент -резолевере каждого приложения.Позвонив setSyncautomaty (), вы можете запустить адаптер синхронизации всякий раз, когда контент -резолвер получает сообщение.
Сетевое соединение доступно, однако это только соединение 3G, а не Wi-Fi. Является ли это причиной долгого ожидания?Как я могу заставить адаптер запускаться каждые 10 секунд?Я уже пробовал использовать периодическую синхронизацию
ContentResolver.addPeriodicSync(account, CONTENT_AUTHORITY, new Bundle(), 10);
но он по-прежнему работает каждые 10 минут.
Решение
Ты жертва андроида SyncManager
.Рассмотрим этот сценарий:вы добавляете синхронизацию каждые 10 минут для своего приложения, но вы установили мое приложение на свой телефон, которое также запрашивает у менеджера периодическую синхронизацию каждые 10 минут, и мое приложение выполнило требования расписания на секунду раньше, чем ваше :) Операция синхронизации мое приложение предполагает передачу больших объемов данных, следовательно, использует всю (или почти) пропускную способность доступного интернет-соединения.Умный SyncManager
увидит, что нецелесообразно запускать следующий процесс синхронизации до тех пор, пока не будет завершен предыдущий, и поэтому будет ждать завершения процесса и только после этого запускать синхронизацию.