Я столкнулся с немного странным поведением моего SyncAdapter.
При первой установке приложения (после удаления с помощью adb) оно запускается и создает учетную запись. В зависимости от порядка некоторых операторов (см. Ниже) мой SyncAdapter onPerformSync () никогда не будет вызван; Моя учетная запись в разделе «Учетные записи и синхронизация» показывает значок «выполняется синхронизация», вращающийся бесконечно. Если я затем сниму флажок синхронизации рядом с учетной записью моего приложения, а затем снова поставлю его, мой 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 в какое-то несогласованное состояние из-за того, что он мгновенно запускает запрос на синхронизацию при создании учетной записи, и я меняю его конфигурацию под его ногами. Но в (едва понятной) документации не упоминаются проблемы с вызовом этих функций в любое время.
Помимо прочего, я обнаружил, что contentResolver.requestSync ()
никогда не вызовет ваш SyncAdapter.onPerformSync ()
, если вы не вызовете ContentResolver.setIsSyncable. (аккаунт, getString (R.string.CONTENT_AUTHORITY), 1);
.
Может кто-нибудь объяснить такое поведение? Документация, связанная с учетными записями и синхронизацией, по меньшей мере неясна.
Я получаю такое поведение на эмуляторе 2.1 при компиляции с SDK 2.1.