2016-05-29 2 views
0

Ich entwickle eine Messaging-App. Jedes Mal, wenn der Benutzer eine Nachricht sendet, wird die Nachricht in der lokalen Datenbank beibehalten und vor dem Senden über eine AsynkTask in einem POST an den Server überprüft, ob weitere Nachrichten mit dem Status "nicht gesendet" in der Datenbank vorhanden sind. Wenn es Nachrichten mit diesem Status gibt, behalte ich die letzte Nachricht bei und erstelle eine Schleife, um Nachricht durch Nachricht zu senden, die eine asynk Aufgabe für jede schafft. Wenn die Antworten des Servers OK sind, wird der Status der Nachricht in der Datenbank in "gesendet" geändert. Wenn keine Nachrichten mit dem Status "not_sent" vorhanden sind, wird die aktuelle Nachricht über eine asynk-Task an den Server gesendet. Das Problem ist, dass jedes Mal, wenn der Benutzer eine Nachricht sendet, diese Überprüfung durchgeführt wird und neue asynk-Aufgaben erstellt werden, bevor überprüft wird, ob die erste AsynkTask die anderen absetzte. Soll ich einen Dienst erstellen und alle Nachrichten senden, um darin versandt zu werden? Oder sollte ich die AsynkTask mit einer SerialExecutor-Option aufrufen?Verwenden von AsynkTask aus IntentService für eine Messaging-App

Antwort

0

Sie einen anderen Zustand der ‚Senden‘ hinzufügen sollte, wenn eine Nachricht (die zweite AsyncTask mit Nachrichten werden diese Weise kein Abkommen, das die erste AsyncTask derzeit das Senden wird) an den Server gesendet wird

+0

Sie empfehlen mir nicht, einen Dienst zu erstellen, aber was ist mit der Option SerialExecutor? – jckhan

0

Von API11 AsyncTask executer verwenden pro Anwendung, also laufen Aufgaben seriell. Kann ein Problem mit der DB-Synchronisation sein.

Für Architektur-Service ist eine gute Wahl für eine Chat-Anwendung.