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?
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)
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.
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.
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.