android service benachrichtigen Aktivität am besten abgeschlossen?

9

Ich habe einen Dienst erstellt, der Daten aus dem Web in einem Hintergrundthread synchronisiert und eine Listenaktivität benachrichtigen möchte, wenn der Dienst abgeschlossen ist, damit der Cursor aktualisiert werden kann. Was wäre der beste Weg, dies zu tun? Ich denke daran, eine Sendung zu senden, wenn der Dienst fertig ist, aber ich bin mir nicht sicher, ob das der beste Weg ist. Ich muss den Cursor erneut fragen, wenn der Dienst beendet ist, also bin ich mir nicht sicher, ob das gut mit Rundfunkempfängern funktioniert? Ich habe nicht viele Android in einer Weile so vielen Dank im Voraus.

    
marchinram 06.07.2011, 06:01
quelle

3 Antworten

15

Verwenden Sie in Ihrem Dienst ein Handler , das einen Client registriert, wenn Ihr ListActivity eine Verbindung mit dem Dienst herstellt. Das bedeutet, dass Sie in Ihrer onServiceConnected -Methode in ListActivity einen Message an Ihren Dienst senden, mit dem Sie die Verbindung zu verbundenen Clients verfolgen können. Dann kannst du einfach diese Clients in deinem Service durchlaufen und ihnen ein Message senden, wenn etwas in deinem Service passiert, über das du deinem ListActivity mitteilen willst. Für weitere Informationen können Sie sich Code in einem laufenden Projekt von mir ansehen: my ListActivity und meine Service stub .

Kurz gesagt, starten und binden Sie in Ihrem MainActivity Ihren Dienst mit:

%Vor%

Definieren Sie einen Messenger, um auf Nachrichten vom Service zu antworten:

%Vor%

Und schreiben Sie dann Ihren Dienstverbindungscode wie folgt:

%Vor%

Beachten Sie, dass replyTo der Messenger ist, den wir gerade erstellt haben.

Behalten Sie in Ihrem NetworkService den Überblick über verbundene Clients mit:

%Vor%

und erstellen Sie Ihren Handler wie:

%Vor%

Wenn Sie dann eine Nachricht an Ihre MainActivity zurücksenden möchten, tun Sie Folgendes:

%Vor%     
zeitkunst 06.07.2011, 06:20
quelle
5

Wenn Sie bereits die Support-Bibliothek verwenden, können Sie genauso einfach eine Broadcast-Nachricht vom Dienst senden, indem Sie die LocalBroadcastManager zurück zu Ihrer Aktivität, die auf die gesendete Sendung wartet.

Durch die Verwendung von Local BroadcastManager wird sichergestellt, dass nur Ihre eigene Anwendung die Übertragung erhält, sodass Sie sich keine Sorgen über das Lecken privater Daten oder das Öffnen potenzieller Sicherheitslücken machen müssen.

Siehe auch: Verwendung von LocalBroadcastManager?

BEARBEITEN (09/2014):

Ein besserer Weg wäre ein Ereignis-Bus-Framework wie Otto (mein Favorit) oder GreenRobot/EventBus , um eine zu enge Kopplung Ihrer Komponenten zu vermeiden.

    
Jay Sidri 09.08.2012 11:25
quelle
0

Wie in Der Leitfaden für erfahrene Programmierer zur fortgeschrittenen Android-Entwicklung

  

Ein Event-Bus ist eine großartige Möglichkeit für den Service, andere Teile zuzulassen   von der App wissen, dass bestimmte Arbeit geleistet wurde. Es bietet einen Standard   Kommunikationskanal (oder "Bus"), der Ereignishersteller und Ereignis   Verbraucher können sich einhaken. Event-Produzenten müssen lediglich die Veranstaltung abgeben   zum Bus; Der Bus wird die relevanten Ereignisse ansteuern   Verbraucher. Dies reduziert die Kopplung zwischen den Herstellern und   Verbraucher, manchmal sogar die Menge an Code zur Quelle benötigt   und versenke diese Ereignisse.

    
Bhuvnesh Varma 12.02.2018 05:37
quelle