Это сильно зависит от того, какой тип синхронизации вам нужен.
периодический
Если ваше приложение является новостным приложением, которое публикует сообщения в определенное время каждый день (скажем, в 7:45 каждый день), то вы выполняете периодическое задание в фоновом режиме, скажем, в 8:00.
например : Drippler. Они уведомляют меня один раз каждый день (около 18:30). Я считаю, что они используют периодическое задание.
Событие вызвано
Если ваша передача данных инициируется действием пользователя, используйте фоновую службу или AsyncTask для передачи данных.
например : DropBox / Evernote. Они синхронизируются, когда я взаимодействую с приложением.
моментальный
Если ваше приложение запускает мгновенные сообщения / почту / непериодические важные обновления, вам нужны push-уведомления, потому что вы хотите немедленно предупредить пользователя. Используйте GCM или Parse для этого случая. Например: WhatsApp / Google чат. Поскольку вы прямо упомянули, что не хотите использовать GCM, я расскажу, почему вы должны использовать стандартный поставщик push-уведомлений вместо того, чтобы писать свой собственный:
Push-уведомления работают мгновенно - задержка очень мала (порядка секунд, редко минут). Если бы вы реализовали свое собственное решение / библиотеку для этого - в наивной модели вы бы пинговали сервер каждую секунду, или 5 секунд, или минуту, чтобы проверить состояние. Это очень неэффективно, так как потребляет процессор (и, следовательно, батарею), пропускную способность мобильного телефона и нагрузку на ваш сервер. Однако в GCM / Parse они всегда оставляют порт открытым для сервера (см. Здесь ). Это стандартный и самый эффективный способ. Кроме того, если 10 приложений используют GCM, вам не нужно 10 открытых подключений, вам нужно только одно для каждого устройства. И вы действительно не хотите разрабатывать свое собственное решение, если у вас нет уважительной причины / средств / времени для этого.
Примечание по адаптеру синхронизации : адаптер синхронизации хорошо работает во всех трех вышеупомянутых случаях. Установите флажок Запуск адаптера синхронизации, и вы увидите, что это зависит либо от GCM, либо от вашего собственного механизма (триггер события или пользовательское решение), либо от доступности сети (триггер события), либо от периодического события. В общем, это хороший удобный класс для синхронизации данных без необходимости каждый раз выполнять длинный список инициализаций или реализовывать все вышеописанные случаи в одном месте.