Dipende molto dal tipo di sincronizzazione di cui hai bisogno.
periodico
Se la tua app è un'app di notizie che pubblica post in un determinato momento ogni giorno (diciamo alle 7.45 AM ogni giorno), quindi esegui un'attività periodica in un servizio in background, ad esempio alle 8 AM.
ad es. : Drippler. Mi informano una volta al giorno (intorno alle 18.30). Credo che utilizzino un compito periodico.
Evento attivato
Se il trasferimento dei dati viene 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.
istantanea
Se la tua app esegue aggiornamenti di messaggistica istantanea / mail / non periodici importanti , allora hai bisogno di notifiche push, perché vuoi avvisare immediatamente l'utente. Utilizza GCM o Parse per questo caso. Ad esempio, WhatsApp / Google chat. Dato che hai esplicitamente menzionato che non vuoi utilizzare GCM, ti dirò perché dovresti utilizzare un provider di notifiche push standard invece di scrivere il tuo:
Le notifiche push funzionano istantaneamente - c'è un ritardo molto piccolo (nell'ordine dei secondi, raramente dei minuti). Se dovessi implementare la tua soluzione / libreria per fare ciò - in un modello naif, dovresti eseguire 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, tengono sempre aperta una porta con il server (vedi qui ). Questo è il modo standard e più efficiente. Inoltre, se 10 app utilizzano GCM, non hai bisogno di 10 connessioni aperte, ne hai solo bisogno una per dispositivo. E davvero non vuoi sviluppare la tua soluzione, a meno che tu non abbia un valido motivo / fondi / tempo per farlo.
Una nota sull'adattatore di sincronizzazione : l'adattatore di sincronizzazione funziona bene per tutti i tre casi precedenti. Controlla Esegui un adattatore di sincronizzazione e vedrai che dipende da GCM o il proprio meccanismo (trigger di evento o soluzione personalizzata) o disponibilità di rete (evento innescato) o evento periodico. Tutto sommato, questa è una buona classe conveniente per sincronizzare i dati senza dover fare una lunga lista di inizializzazioni ogni volta o per implementare tutti i casi sopra in un unico posto.