Depende en gran medida del tipo de sincronización que necesite.
Periódico
Si su aplicación es una aplicación de noticias que publica publicaciones a una hora determinada todos los días (digamos a las 7.45 a.m. todos los días), entonces ejecuta una tarea periódica en un servicio en segundo plano, digamos a las 8 a.m.
Por ejemplo : Drippler. Me notifican una vez al día (alrededor de las 6.30 p.m.). Creo que usan una tarea periódica.
Evento activado
Si su transferencia de datos se desencadena por la acción del usuario, utilice un servicio en segundo plano o una AsyncTask para la transferencia de datos.
Por ejemplo : DropBox / Evernote. Se sincronizan cuando interactúo con la aplicación.
Instantáneo
Si su aplicación ejecuta mensajería instantánea / correos / actualizaciones importantes no periódicas , entonces necesita notificaciones push, porque desea alertar al usuario de inmediato. Use GCM o Parse para este caso. por ejemplo: WhatsApp / chat de Google. Como mencionó explícitamente que no desea usar GCM, le diré por qué debería usar un proveedor de notificaciones push estándar en lugar de escribir el suyo propio:
Las notificaciones automáticas funcionan instantáneamente: hay muy poco retraso (en el orden de segundos, raramente minutos). Si implementara su propia solución / biblioteca para hacerlo, en un modelo ingenuo, haría ping al servidor cada segundo o 5 segundos o un minuto para verificar el estado. Esto es muy ineficiente ya que consume CPU (y, por lo tanto, batería), ancho de banda en el móvil y carga en su servidor. Sin embargo, en GCM / Parse, siempre mantienen un puerto abierto con el servidor (ver aquí ). Esta es la forma estándar y más eficiente. Además, si 10 aplicaciones usan GCM, no necesita 10 conexiones abiertas, solo necesita una por dispositivo. Y realmente no desea desarrollar su propia solución a menos que tenga una razón / fondos / tiempo válidos para hacerlo.
Una nota sobre el adaptador de sincronización : el adaptador de sincronización funciona bien en los tres casos anteriores. Marque Ejecutar un adaptador de sincronización y verá que depende de GCM o de su propio mecanismo (activación de eventos o solución personalizada) o disponibilidad de red (activación de eventos) o eventos periódicos. Con todo, esta es una buena clase conveniente para sincronizar datos sin tener que hacer una larga lista de inicializaciones cada vez o implementar todos los casos anteriores en un solo lugar.