wake-up-neo.com

Benachrichtigen Sie die Aktivität vom Service

Ich versuche, ein Service von meinem Activity aus zu starten, um nach Änderungen auf einer Webseite zu suchen. Es handelt sich um eine private App, die die Akkulaufzeit nicht stört ...

Aber ich möchte gerne Daten von meiner Service an meine Activity... übergeben. Ich kann anscheinend keinen Weg finden, die Activity von meiner Service zu nennen. Wie kann ich das erreichen?

41
Mars

Wie Alex angedeutet hat, können Sie sich an den Dienst binden und eine Art Listener oder Rückruf an den Dienst übergeben, der für Ereignisse verwendet werden soll.

Sie können auch eine Broadcast Intent verwenden. Möglicherweise verwenden Sie Methoden wie setPackage() für die Intent, um den Umfang der Broadcasts einzuschränken.

Oder Sie können createPendingResult() verwenden, um eine PendingIntent zu erstellen, die Sie als zusätzliche Intent an den Service übergeben. Der Service kann dann diese PendingIntent verwenden, um onActivityResult() in Ihrer Aktivität auszulösen.

Oder Sie können eine ResultReceiver verwenden.

Oder Sie können eine Messenger verwenden.

(Zwar habe ich diese beiden Ansätze nicht ausprobiert, aber ich denke, dass sie hier funktionieren werden)

47
CommonsWare

Eine weitere Alternative: Wenn Ihr Dienst den Inhaltsanbieter aktualisiert, kann die Aktivität über ContentObserver benachrichtigt werden. Dies würde ausreichen, wenn Ihr Dienst Daten vom Server herunterlädt und Sie einfach neue Inhalte in der Aktivität anzeigen möchten.

3

Einige hässliche Wege:

1.) Wenn die Aktivität noch nicht begonnen hat, verwenden Sie intent und startActivity, aber denken Sie an intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);.

2.) Andernfalls, wenn die Aktivität bereits gestartet ist, können Sie Ihre eigene Rückmeldemethode in die Aktivität schreiben, die Methode im Service registrieren und dann die Methode im Service direkt aufrufen. 

Hoffnung, einen klugen Weg zu finden.

Ich denke, Broadcast funktioniert auch gut. Sie können eine statische innere Klasse für den Empfang von Broadcast- und Startaktivitäten schreiben. Aber es ist meiner Meinung nach auch hässlich.

1
vvsueprman

Der ResultReceiver-Mechanismus wurde in einem anderen Beitrag erläutert: - Restful API-Dienst Er würde jedoch nicht in allen Fällen funktionieren. Bitte beziehen Sie sich auf meinen Kommentar zu diesem Beitrag. Der Broadcast- oder PendingIntent-Mechanismus mit begrenztem Umfang scheint geeigneter zu sein.

0
Nikhil_Katre