2 Stimmen

Übergeben von ArrayList<T> zwischen Service und Aktivität

Ich habe eine App, die einen Dienst hat, der STICKY läuft, wenn er Arbeit zu erledigen hat, auch wenn der Benutzer die App schließt, läuft der Dienst, bis seine Arbeit beendet ist.

Schau, ich habe dem Tutorial Android Beispiel: Kommunikation zwischen Aktivität und Dienst mithilfe von Nachrichten gefolgt und es an meine App angepasst, aber wenn ich versuche, Nachrichten zu senden, werden diese nicht von meinem Dienst oder Client empfangen.

Außerdem muss ich komplexere Argumente wie eine ArrayList übergeben, der Ablauf ist wie folgt:

  1. Benutzer starten meine App und die App startet den Dienst
  2. Der Benutzer drückt einen Knopf in der App und die App sendet ein Signal an den Dienst (das kann eine Ganzzahl sein)
  3. Der Dienst ruft Daten aus dem Internet ab, verarbeitet sie und sendet diese Daten an die App, wenn sie läuft, sonst benachrichtigt der Dienst den Benutzer über neue Daten
  4. Wenn für eine Weile nichts vom Server empfangen wird, stoppt der Dienst.

Die Frage ist, wie man komplexe Objekte zwischen einem Dienst und einer Anwendung übergeben kann?

1voto

Jason Sankey Punkte 2328

Sie können komplexe Objekte in einer Nachricht mit setData(android.os.Bundle) übergeben. Bundles benötigen Parcelable-Daten, damit sie serialisiert werden können, unterstützen jedoch auch ArrayLists von grundlegenden Typen (wie beispielsweise Integer und Strings) zur Bequemlichkeit. Wenn Ihre Liste benutzerdefinierte Objekte enthält, müssen sie Parcelable implementieren und sie mit putParcelableArrayList(String key, ArrayList value) zum Bundle hinzufügen.

Wenn Ihre Daten recht komplex/strukturiert sind, könnten Sie auch in Betracht ziehen, einen Content Provider zu verwenden. Es gibt eine anfängliche Lernkurve, aber Provider eignen sich gut für einige Fälle.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X