Я столкнулся с немного странным поведением с моим SyncAdapter.
При первой установке приложения (после удаления с помощью adb) оно запускается и создает учетную запись.В зависимости от порядка некоторых операторов (см. Ниже), onPerformSync () моего SyncAdapter никогда не будет вызываться;моя учетная запись в разделе «Учетные записи и синхронизация» показывает значок «выполняется в процессе» вращается бесконечно.Если я затем сниму флажок синхронизации рядом с учетной записью моего приложения, а затем перепроверю его, мой onPerformSync () будет вызван немедленно.
Это приведет к тому, что мой SyncAdapter никогда не будет вызываться.Значок «Выполняется синхронизация» вращается вечно, если я не сниму флажок, а затем снова установите флажок «Синхронизация»:
final Account account = new Account(mUsername, getString(R.string.ACCOUNT_TYPE));
mAccountManager.addAccountExplicitly(account, mPassword, null);
ContentResolver.setSyncAutomatically(account, getString(R.string.CONTENT_AUTHORITY), true);
ContentResolver.setIsSyncable(account, getString(R.string.CONTENT_AUTHORITY), 1);
При таком же порядке этих операторов все работает отлично:
final Account account = new Account(mUsername, getString(R.string.ACCOUNT_TYPE));
ContentResolver.setSyncAutomatically(account, getString(R.string.CONTENT_AUTHORITY), true);
ContentResolver.setIsSyncable(account, getString(R.string.CONTENT_AUTHORITY), 1);
mAccountManager.addAccountExplicitly(account, mPassword, null);
Я предполагаю, что я помещаю SyncManager в какое-то противоречивое состояние из-за его мгновенного запуска запроса синхронизации при создании учетной записи, и я изменяю его конфигурацию под его ногами.Но (едва согласованная) документация не упоминает никаких проблем с вызовом этих функций в любое время.
В качестве отступления для других, борющихся с SyncAdapters, я обнаружил, что contentResolver.requestSync()
никогда не вызовет ваш SyncAdapter.onPerformSync()
, если толькоВы звоните ContentResolver.setIsSyncable(account, getString(R.string.CONTENT_AUTHORITY), 1);
.
Может ли кто-нибудь объяснить это поведение?Документация, касающаяся Учетных записей и Синхронизации, по меньшей мере, немного неясна.
Я получаю такое поведение на Эмуляторе 2.1, компилируя его в 2.1 SDK.