Я столкнулся с немного странным поведением с моим SyncAdapter.
В первый раз, когда я устанавливаю свое приложение (после удаления с помощью adb), он запускает и создает учетную запись. В зависимости от упорядочения некоторых операторов (см. Ниже) мой SyncAdapter onPerformSync() никогда не будет вызываться; моя учетная запись в разделе "Учетные записи и синхронизация" показывает, что значок "sync in progress" работает бесконечно. Если я сниму галочку синхронизации рядом с моей учетной записью приложения и затем перепроверяю ее, мой 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.