Первая синхронизация циклов бесконечно

У меня ситуация с 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); 

0 ответов

Другие вопросы по тегам