Dipende fortemente dal tipo di sincronizzazione di cui hai bisogno.
periodico
Se la tua app è un'app di notizie che pubblica post ogni giorno a una determinata ora (diciamo alle 7.45 ogni giorno), allora esegui un'attività periodica in un servizio in background, diciamo alle 8:00.
ad es . : Drippler. Mi avvisano una volta al giorno (intorno alle 18.30). Credo che usano un compito periodico.
Evento attivato
Se il trasferimento dei dati è attivato dall'azione dell'utente, utilizzare un servizio in background o un AsyncTask per il trasferimento dei dati.
ad es . : DropBox / Evernote. Si sincronizzano quando interagisco con l'app.
Istantaneo
Se la tua app esegue messaggistica istantanea / mail / aggiornamenti importanti non periodici , allora hai bisogno di notifiche push, perché vuoi avvisare immediatamente l'utente. Utilizzare GCM o Parse per questo caso. ad esempio: chat di WhatsApp / Google. Dato che hai esplicitamente menzionato che non vuoi usare GCM, ti dirò perché dovresti usare un provider di notifiche push standard invece di scrivere il tuo:
Le notifiche push funzionano istantaneamente: il ritardo è molto ridotto (nell'ordine dei secondi, raramente dei minuti). Se dovessi implementare la tua soluzione / libreria per farlo - in un modello ingenuo, esegui il ping del server ogni secondo o 5 secondi o un minuto per verificare lo stato. Questo è molto inefficiente in quanto consuma CPU (e quindi batteria), larghezza di banda sul cellulare e carico sul server. Tuttavia, in GCM / Parse, mantengono sempre una porta aperta con il server (vedi qui ). Questo è il modo standard ed efficiente. Inoltre, se 10 app utilizzano GCM, non sono necessarie 10 connessioni aperte, ma ne serve solo una per dispositivo. E davvero non vuoi sviluppare la tua soluzione se non hai un motivo / fondi / tempo validi per farlo.
Nota sull'adattatore di sincronizzazione: l' adattatore di sincronizzazione funziona bene per tutti e tre i casi precedenti. Controlla Esecuzione di un adattatore di sincronizzazione e vedrai che dipende da GCM o dal tuo meccanismo (trigger di evento o soluzione personalizzata) o dalla disponibilità di rete (trigger di evento) o evento periodico. Tutto sommato, questa è una buona classe conveniente per sincronizzare i dati senza dover fare ogni volta un lungo elenco di inizializzazioni o implementare tutti i casi di cui sopra in un unico posto.