Тоже в свое время полез делать честную синхронизацию и понял, что как-то слишком много усилий приходится прикладывать, в итоге сделал через поллящий по таймеру Service. Оверхэд небольшой, просто, и работает, как из пушки. Если бы прочитал вашу статью, гораздо меньше времени потратил бы на принятие такого решения, а то по крупицам выковыривал знания из документациии, убил ощутимое количество времени, и в итоге отказался. Спасибо за хорошую статью.
Но не могу промолчать, прямо глаз резануло, простите за коде ревью, понятное дело, это не критично, но все же:
1) у вас классы называются с маленькой буквы mySyncService, mySyncService — как-то не принято в Java-коммьюнити так делать
2) член класса называется mSyncAdapter — зачем буква m в начале? Зачем различать члены класса и не члены класса с помощью имен? В современных IDE подсветки вполне хватает и глаз не цепляется за все эти m, _, m_. На мой взгляд лишняя информация.
Да у них и интерфейсы с I начинаются, например IBinder тот же самый. В то время как сама идея интефейса состоит в том, что ты не знаешь, чем ты пользуешься, просто Binder или просто Connection. Зачем мне знать, интерфейс у меня это или конкретная имплементация, в стандартном JDK таких I нет, хотя m_ встречаются иногда в сорсах.
Что на них смотреть, как говорила мне мама — если все пойдут с обрыва прыгать, ты тоже прыгнешь?
Вы используете другой контекст для толкования слов моей мамы, в котором они, бесспорно, неверны.
Я имел в виду, если человек говорит, что в своих проектах не использует m_, то что ж он тут не соблюдает свои внутренние конвеншинзы. У меня на работе мы тоже используем простые имена и новичкам бьем по рукам за m. Да и Java Naming Conventions (стандарт?) как бы намекает:
Except for variables, all instance, class, and class constants are in mixed case with a lowercase first letter. Internal words start with capital letters. Variable names should not start with underscore _ or dollar sign $ characters, even though both are allowed
Меня, как не разработчика, не знакомого с внутренней кухней, всегда интересовал вопрос — как часто происходит синхронизация аккаунтов из Setting/Accounts and Sync и почему она нигде не задается?
Если не задана автоматическая периодическая синхронизация (addPeriodicSync), то только в том случае, когда изменились локальные данные в ContentProvider или когда приложение принудительно запросило синхронизацию. Вот мой вопрос о том же на SO.
Если приложение поддерживает периодические синхронизации, то разработчик может добавить настройку, чтоб задавать их частоту.
Походу нет там никакого периода. На ету тему есть интересное видео с GoogleIO 2010, где описывается технология PUSH которая используется, например, для получения новых мейлов.
Для работы addPeriodicSync необходим Android 2.2 (Since: API Level 8).
Но никто не запрещает организовать периодические синхронизации через AlarmManager — в этом случае не совсем ясно чем SyncAdapter лучше, чем Service, также запускающийся через AlarmManager.
Особенности синхронизации в Android-приложении