Pętle synchronizacji po raz pierwszy w nieskończoność

Mam sytuację z SyncAdapter Nie wiem, jak to naprawić.

Używam okresowych synchronizacji. Metoda onPerformSync rejestruje dla mnie pewne informacje, aby wiedzieć, że proces działa (nie ma wywołań powiadamiania o zmianach w dostawcach treści lub czymkolwiek innym).

Projekt składa się z dwóch aplikacji: pierwsza tworzy konto użytkownika (tylko w celach testowych). Drugi zawiera adapter synchronizacji. Należy pamiętać, że jest to całkowicie legalne dla zakresu projektu.

Najpierw instaluję aplikację z kontem. Widzę, że konto zostało utworzone.

Następnie instaluję aplikację przy użyciu adaptera synchronizacji i przy pierwszym uruchomieniu synchronizacja zawiesza się. Widząc ustawienia synchronizacji konta, ikona pokrętła ciągle działa i nie są rejestrowane żadne komunikaty dziennika (co oznacza, że ​​nie osiąga onPerformSync).

Mogę jednak anulować synchronizację w Ustawieniach, a następnie proces synchronizacji zacznie działać normalnie. Oznacza to, że okablowanie między kontem, dostawcą treści i usługą SyncService jest prawidłowo ustawione.

Jestem świadomy, że dodanie / usunięcie konta uruchamia inne procesy synchronizacji, więc pozwalam, aby upłynęło sporo czasu, zanim zainstaluję aplikację przy użyciu adaptera synchronizacji.

Jakieś wskazówki, dlaczego tak się dzieje?

@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);
}

EDYTOWAĆ

Dowiedziałem się, że wywołanie anulowania na synchronizacji sprawia, że ​​działa. Nie najlepsze rozwiązanie, ale teraz rozwiązuje problem. Łączę tę linię z flagą „isFirstUse”.

ContentResolver.cancelSync(account, authority); 

questionAnswers(0)

yourAnswerToTheQuestion