Es hängt stark davon ab, welche Art von Synchronisierung Sie benötigen.
Periodisch
Wenn es sich bei Ihrer App um eine Nachrichten-App handelt, die jeden Tag zu einer bestimmten Zeit Beiträge veröffentlicht (z. B. täglich um 7.45 Uhr), führen Sie eine regelmäßige Aufgabe in einem Hintergrunddienst aus, z. B. um 8 Uhr.
zB : Drippler. Sie benachrichtigen mich jeden Tag einmal (gegen 18.30 Uhr). Ich glaube, sie verwenden eine periodische Aufgabe.
Ereignis ausgelöst
Wenn Ihre Datenübertragung durch eine Benutzeraktion ausgelöst wird, verwenden Sie einen Hintergrunddienst oder eine AsyncTask für die Datenübertragung.
zB : DropBox / Evernote. Sie werden synchronisiert, wenn ich mit der App interagiere.
Augenblicklich
Wenn Ihre App Instant Messaging / E-Mails / nicht regelmäßige wichtige Updates ausführt, benötigen Sie Push-Benachrichtigungen, da Sie den Benutzer sofort benachrichtigen möchten. Verwenden Sie für diesen Fall entweder GCM oder Parse. zB: WhatsApp / Google Chat. Da Sie explizit die Sie erwähnt nicht wollen , zu verwenden GCM, werde ich sagen , warum Sie sollten einen Standard - Push - Benachrichtigung - Provider statt Ihre eigene Schreibweise verwenden:
Push-Benachrichtigungen funktionieren sofort - es gibt nur eine sehr geringe Verzögerung (in der Größenordnung von Sekunden, selten Minuten). Wenn Sie dazu Ihre eigene Lösung / Bibliothek implementieren würden - in einem naiven Modell würden Sie den Server alle Sekunden, 5 Sekunden oder eine Minute anpingen, um den Status zu überprüfen. Dies ist sehr ineffizient, da die CPU (und damit der Akku), die Bandbreite auf dem Mobiltelefon und die Last auf Ihrem Server verbraucht werden. In GCM / Parse bleibt jedoch immer ein Port zum Server offen (siehe hier ). Dies ist der Standard und effizienteste Weg. Wenn 10 Apps GCM verwenden, benötigen Sie keine 10 offenen Verbindungen, sondern nur eine pro Gerät. Und Sie möchten wirklich keine eigene Lösung entwickeln, es sei denn, Sie haben einen gültigen Grund / Geld / Zeit dafür.
Hinweis zum Synchronisationsadapter : Der Synchronisationsadapter funktioniert in allen drei oben genannten Fällen einwandfrei. Wenn Sie das Kontrollkästchen " Synchronisierungsadapter ausführen" aktivieren , wird angezeigt, dass dies entweder von GCM oder Ihrem eigenen Mechanismus (Ereignisauslöser oder benutzerdefinierte Lösung) oder der Netzwerkverfügbarkeit (Ereignisauslöser) oder einem periodischen Ereignis abhängt. Alles in allem ist dies eine gute praktische Klasse, um Daten zu synchronisieren, ohne jedes Mal eine lange Liste von Initialisierungen durchführen zu müssen oder alle oben genannten Fälle an einem Ort zu implementieren.