Почему Android запускает синхронизацию учетной записи Google каждый раз, когда я добавляю/удалю учетную запись пользовательского типа? - программирование
Подтвердить что ты не робот

Почему Android запускает синхронизацию учетной записи Google каждый раз, когда я добавляю/удалю учетную запись пользовательского типа?

У меня есть приложение, связанное с веб-службой, которая использует AccountManager и Sync, чтобы пользователи могли войти в свою учетную запись через приложение и синхронизировать свои данные (это настраиваемые данные, а не контакты или что-то еще, используемое учетными записями Google). AFAIK, я делаю все так, как должен. Когда пользователь регистрируется через наш API, я сохраняю их учетную запись в AccountManager Android:

AccountManager am = AccountManager.get(context);
m.addAccountExplicitly(new Account(username, ACCOUNT_TYPE), account_id, user_data);

Я определил ACCOUNT_TYPE, чтобы просто быть именем пакета приложения, которого должно быть достаточно, чтобы отличить его от любого другого типа учетной записи.

Как только добавлена ​​учетная запись, я устанавливаю ее для автоматической синхронизации:

ContentResolver.setSyncAutomatically(account, AUTHORITY, true);
ContentResolver.addPeriodicSync(account, AUTHORITY, new Bundle(), SYNC_FREQUENCY_SECONDS);

Я определил SYNC_FREQUENCY_SECONDS как 86400 (т.е. 1 день).

Аналогично, если пользователь выходит из системы, я просто извлекаю их из AccountManager и вызываю removeAccount(), чтобы удалить его. Приятно и просто.

Синхронизация выполняется через мой собственный код, потому что все пользовательские данные синхронизируются, и все работает отлично. Однако, что сводит меня с ума, так это то, что всякий раз, когда я использую этот код для добавления или удаления учетной записи (моего собственного типа), она сразу же запускает синхронизацию всех учетных записей Google на устройстве. Это означает, что перед синхронизацией моих данных сначала необходимо синхронизировать все данные электронной почты, календаря, контакты, журналы Google Play, данные и фотографии Google+ и т.д. И т.д. И т.д. Это может занять несколько минут, в течение которых мое приложение просто терпеливо ждет своей очереди для синхронизации данных. Это очень сложно, и моим пользователям будет сложно понять, почему так долго приходится синхронизировать свои данные после входа в систему (не говоря уже о том, что при синхронизации этих данных телефон имеет тенденцию замедляться вплоть до момента безответственности).

Я делаю что-то неправильно здесь? Есть ли что-то в моем коде, которое непреднамеренно сообщает Android: "Эй, иди и синхронизируй все свои данные Google сейчас!"? Или это что-то, что входит в структуру учетных записей/синхронизации Google, с которой мне просто приходится мириться?

4b9b3361

Ответ 1

Я думаю (хотя я не уверен на 100%), что это энергосберегающая функция; более эффективно использовать батарею для передачи одной длинной передачи, а не нескольких более коротких передач, потому что радиостанция остается в режиме ожидания в течение некоторого времени после окончания передачи, и поэтому отправка одной длинной передачи позволяет избежать останова в режиме ожидания (по существу, мощности) более одного раза. Поэтому я предполагаю, что инфраструктура синхронизации пытается объединиться как можно больше синхронизации, как это возможно.

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