Комментарии 24
Тоже в свое время полез делать честную синхронизацию и понял, что как-то слишком много усилий приходится прикладывать, в итоге сделал через поллящий по таймеру Service. Оверхэд небольшой, просто, и работает, как из пушки. Если бы прочитал вашу статью, гораздо меньше времени потратил бы на принятие такого решения, а то по крупицам выковыривал знания из документациии, убил ощутимое количество времени, и в итоге отказался. Спасибо за хорошую статью.
Но не могу промолчать, прямо глаз резануло, простите за коде ревью, понятное дело, это не критично, но все же:
1) у вас классы называются с маленькой буквы mySyncService, mySyncService — как-то не принято в Java-коммьюнити так делать
2) член класса называется mSyncAdapter — зачем буква m в начале? Зачем различать члены класса и не члены класса с помощью имен? В современных IDE подсветки вполне хватает и глаз не цепляется за все эти m, _, m_. На мой взгляд лишняя информация.
Но не могу промолчать, прямо глаз резануло, простите за коде ревью, понятное дело, это не критично, но все же:
1) у вас классы называются с маленькой буквы mySyncService, mySyncService — как-то не принято в Java-коммьюнити так делать
2) член класса называется mSyncAdapter — зачем буква m в начале? Зачем различать члены класса и не члены класса с помощью имен? В современных IDE подсветки вполне хватает и глаз не цепляется за все эти m, _, m_. На мой взгляд лишняя информация.
однако если посмотреть исходники Android, то увидим что там члены класса как раз начинаются с m.
//оговорюсь сразу, что у меня в команде принято не писать ничего перед названием члена класса.
//оговорюсь сразу, что у меня в команде принято не писать ничего перед названием члена класса.
Да у них и интерфейсы с I начинаются, например IBinder тот же самый. В то время как сама идея интефейса состоит в том, что ты не знаешь, чем ты пользуешься, просто Binder или просто Connection. Зачем мне знать, интерфейс у меня это или конкретная имплементация, в стандартном JDK таких I нет, хотя m_ встречаются иногда в сорсах.
Что на них смотреть, как говорила мне мама — если все пойдут с обрыва прыгать, ты тоже прыгнешь?
Что на них смотреть, как говорила мне мама — если все пойдут с обрыва прыгать, ты тоже прыгнешь?
Есть слово такое — стандарт. Если производители розеток 220В начнут пользоваться логикой вашей мамы, то ничего хорошего не выйдет.
Вы используете другой контекст для толкования слов моей мамы, в котором они, бесспорно, неверны.
Я имел в виду, если человек говорит, что в своих проектах не использует 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
про 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
про m ничего не сказано, но идея та же.
Я разделяю Ваше негодование по поводу лишнего m, нарушающего Java Naming Conventions, но оно прописано в Code Style Guidelines для андроида:
Non-public, non-static field names start with m.
Static field names start with s.
Код — перевод ответа со StackOverflow, решил оставить как есть (хотя с вашими комментариями согласен).
Хм. Это не Ваша статья висела в песочнице пару недель назад? :-)
Меня, как не разработчика, не знакомого с внутренней кухней, всегда интересовал вопрос — как часто происходит синхронизация аккаунтов из Setting/Accounts and Sync и почему она нигде не задается?
Сам задаюсь этим вопросом, хотя уже воплотил в своем проекте синхронизацию через SyncManager.
Если не задана автоматическая периодическая синхронизация (addPeriodicSync), то только в том случае, когда изменились локальные данные в ContentProvider или когда приложение принудительно запросило синхронизацию. Вот мой вопрос о том же на SO.
Если приложение поддерживает периодические синхронизации, то разработчик может добавить настройку, чтоб задавать их частоту.
Если приложение поддерживает периодические синхронизации, то разработчик может добавить настройку, чтоб задавать их частоту.
Странно, у меня Андроид 2.1 и все аккаунты синхронизируются в бэкграунде. Вы точно уверены насчет ограничения 2.2 и выше?
Для работы addPeriodicSync необходим Android 2.2 (Since: API Level 8).
Но никто не запрещает организовать периодические синхронизации через AlarmManager — в этом случае не совсем ясно чем SyncAdapter лучше, чем Service, также запускающийся через AlarmManager.
Но никто не запрещает организовать периодические синхронизации через AlarmManager — в этом случае не совсем ясно чем SyncAdapter лучше, чем Service, также запускающийся через AlarmManager.
А можно вкратце рассказать про первый способ. Ссылка на него (http://habrahabr.ru/blogs/android/103670/) больше не действует к сожалению.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Особенности синхронизации в Android-приложении