Синхронизация в первый раз бесконечно

У меня ситуация с SyncAdapter. Я не знаю, как это исправить.

Я использую периодические синхронизации. Метод onPerformSync просто регистрирует некоторую информацию для меня, чтобы знать, что этот процесс работает (нет вызовов notifyChanges в контент-провайдерах или что-то еще).

Проект состоит из двух приложений: первый создает учетную запись пользователя (только для целей тестирования). Второй содержит адаптер синхронизации. Обратите внимание, что это совершенно законно для сферы действия проекта.

Сначала я устанавливаю приложение с учетной записью. Я вижу, что учетная запись создана.

Затем я устанавливаю приложение с адаптером синхронизации и в первый раз запускает синхронизацию. Увидев настройки синхронизации учетной записи, значок счетчика непрерывно работает и сообщения журнала не регистрируются (это означает, что он не достигает onPerformSync).

Тем не менее, я могу отменить синхронизацию в настройках, а затем процесс синхронизации начнет нормально работать. Это означает, что правильно настроена проводка между учетной записью, поставщиком контента и SyncService.

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

Любые намеки на то, почему это происходит?

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAccountManager = AccountManager.get(this); // No worries here. The account exists and it's the one I want Account[] accounts = mAccountManager.getAccountsByType(Constants.ACCOUNT_TYPE); // Just first account for TESTING purposes if (accounts != null && accounts.length > 0) account = accounts[0]; else { Log.e(TAG, "No accounts set!!"); return; } // Set sync for this account. Bundle extras = new Bundle(); extras.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false); extras.putBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false); extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false); ContentResolver.setIsSyncable(account, authority, 1); // Mandatory since 3.1 // Allows the provider to sync when internet connection is back ContentResolver.setSyncAutomatically(account, authority, true); // Add a periodic synchronization ContentResolver.addPeriodicSync(account, authority, extras, POLL_FREQUENCY); } 

РЕДАКТИРОВАТЬ

Я узнал, что вызов отмены на синхронизацию заставляет его работать. Не лучшее решение, но оно устраняет проблему. Я помещал эту линию в сочетании с флагом «isFirstUse».

 ContentResolver.cancelSync(account, authority); 

Intereting Posts