2013-07-26 2 views
6

Könnten Sie mir bitte sagen, was ist der richtige Weg, um die Synchronisierungsaufträge in Android zu tun (z. B. wenn ich etwa 5 Arbeitsplätze habe)?
Hinweis! Durch Synchronisation Job meine ich einen Faden, der im Hintergrund läuft und sendet einige Daten (zB Analytik) über einen Web-Service ...Android-Hintergrundjobs für die Synchronisierung mit einem Webdienst

Weitere Informationen eine genauere Beschreibung lesen Sie bitte:

Ich habe ein bekam Aufgabe, einige Hintergrundjobs zu implementieren, die einige Daten mit einem erholsamen Webdienst synchronisieren. Einige der Jobs sollten regelmäßig mit einer bestimmten Verzögerung geplant werden. Wenn es keine Internetverbindung gibt, dann speichere ich einfach die Daten und später, wenn die Verbindung wieder erscheint, versuche ich die Jobs auszuführen. In Anbetracht der Tatsache, dass das Erstellen neuer Threads ziemlich teuer ist und insbesondere bei der mobilen Entwicklung verwende ich einen Cache-Thread-Pool (ExecutorService) und jedes Mal, wenn einige Aktionen für die Verarbeitung angefordert werden, versuche ich die Threads wiederzuverwenden. Ich benutze AsyncTask nicht, weil ich dieses durch diesen Executor Service (Executors.newCachedTreadPool) ersetzt habe und es ist bequem für mich, weil ich nicht viele AsyncTasks erstellen muss, wie ich die Threads von ES wiederverwende ... Um zu unterstützen Bei den geplanten Jobs verwende ich einen anderen Thread-Pool (ScheduledExecutorService) und verwende Callable, weil ich das Ausführungsergebnis sehen muss. Ich habe hier eine komplexe Logik ... Wenn also eine bestimmte Aktion in der App ausgeführt wird, funktioniert der 1. Thread-Pool (ist wie die AsyncTask) wie eine AsyncTask, der Vorteil ist, dass ich keine neuen Threads erstelle aber ich wiederhole sie. Dadurch wird der Hauptthread der Benutzeroberfläche nicht blockiert. Es wird an den geplanten Executor delegiert, der seine Aufgabe erfüllt. Diese Lösung funktioniert. Und es klingt gut für mich, da ich von der Server-Seite komme, aber ich bin interessiert zu wissen, wie dies auf Android richtig gemacht werden muss? Ist das für eine mobile App zu anspruchsvoll? Merci, Serge

Antwort

10

Verwenden Sie einen Synchronisationsadapter. Siehe http://developer.android.com/training/sync-adapters/index.html. Ein Synchronisationsadapter wird im Hintergrund ausgeführt, vom System verwaltet und effizient geplant, sodass bei der Synchronisierung keine Akkuleistung verloren geht. Das Beste daran ist, dass das System die Netzwerkverbindung automatisch erkennt und den Synchronisierungsadapter bei Bedarf in die Warteschlange stellt. Wenn Sie möchten, können Sie mehrere Sync-Adapter verwenden.

Beachten Sie, dass obwohl es scheint, dass Sync-Adapter einen Content-Provider und einen Authentifikator benötigen, sie wirklich nicht.

+0

Vielen Dank Joe, Ihre Antwort ist wirklich hilfreich. Ich habe den Artikel gelesen und werde die Sync Adapter verwenden. Es scheint, dass ich das gesucht habe ... Vielen Dank. – Serge

Verwandte Themen