Запускать только мою синхронизацию сразу после добавления учетной записи в AccountManager?

У меня есть дюжина учетных записей в AccountManager, и при добавлении новой учетной записи Android начинает синхронизировать все учетные записи. Так как их много, у меня уходит не менее 15 секунд на запуск синхронизации.

Есть ли способ остановить/отменить синхронизацию всех учетных записей, когда я добавляю новую, чтобы я мог позвонить ContentResolver.requestSync и начать синхронизацию только моей учетной записи в этот момент?

Спасибо,

Александр Ильич.


person Aleksandar Ilic    schedule 08.06.2011    source источник


Ответы (1)


Синхронизация задумана как фоновая служба. 15 секунд кажутся вполне разумной задержкой перед началом синхронизации, особенно когда добавление новой учетной записи (должно ли?) быть очень редким событием. Другая мысль заключается в том, что если у вас есть дюжина активных учетных записей, вы можете попытаться подумать о том, как уменьшить это количество. В конце концов, чего у вас так много? Несколько аккаунтов сразу на сайте?

Вас беспокоит скорость отклика при первоначальной настройке или у вас есть какой-то вариант использования, требующий частого добавления и удаления учетных записей?
Если последнее, посмотрите на простое включение и выключение ContentResolver.setIsSyncable() для данной пары контент/аккаунт. . При значении false флажок на странице учетных записей становится серым, и синхронизация не происходит. Это может удовлетворить ваши потребности лучше, чем создание и удаление учетной записи.

Тем не менее, вы можете попробовать ускорить его.

  1. вручную вызовите ContentResolver.requestSync (Account account, String authority, Bundle extras) и посмотрите на дополнительные значения, определенные в ContentResolver. Вы можете попробовать SYNC_EXTRAS_MANUAL и SYNC_EXTRAS_EXPEDITED.

  2. В более экстремальном случае (который может действительно разозлить ваших пользователей, если вы его испортите...) будет сохранение текущего состояния основной синхронизации, а затем явное отключение основной синхронизации (ContentResolver.setMasterSyncAutomatically(boolean sync)) и нажатие синхронизируйте с SYNC_EXTRAS_MANUAL, чтобы переопределить, а затем восстановите основную синхронизацию до ее исходного состояния после завершения синхронизации.

Вопрос в том, как это сделать... Я думаю, вам нужно будет отключить это из кода создания учетной записи в вашем приложении.

person jcwenger    schedule 01.07.2011
comment
Привет @jcwenger, спасибо за ответ. Меня беспокоила скорость отклика при первой установке, и я не нашел решения, чтобы запросить только мою синхронизацию. Я думаю, что нет правильного способа синхронизации только одной учетной записи. - person Aleksandar Ilic; 01.08.2011