У меня есть приложение, связанное с веб-службой, которая использует 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, с которой мне просто приходится мириться?