Ich schreibe meine erste Android-Anwendung und versuche, mich mit der Kommunikation zwischen Diensten und Aktivitäten vertraut zu machen. Ich habe einen Dienst, der im Hintergrund ausgeführt wird und einige GPS- und zeitbasierte Protokollierungen durchführt. Ich werde eine Aktivität haben, mit der der Dienst gestartet und gestoppt wird.
Zuerst muss ich herausfinden können, ob der Dienst ausgeführt wird, wenn die Aktivität gestartet wird. Hier gibt es noch einige andere Fragen, daher denke ich, dass ich das herausfinden kann (aber ich kann Ihnen gerne Ratschläge geben).
Mein eigentliches Problem: Wenn die Aktivität ausgeführt und der Dienst gestartet wird, muss der Dienst Nachrichten an die Aktivität senden können. Einfache Zeichenfolgen und Ganzzahlen an dieser Stelle - meistens Statusmeldungen. Die Nachrichten werden nicht regelmäßig gesendet, daher denke ich nicht, dass das Abrufen des Dienstes ein guter Weg ist, wenn es einen anderen Weg gibt. Ich möchte diese Kommunikation nur, wenn die Aktivität vom Benutzer gestartet wurde. Ich möchte die Aktivität nicht über den Dienst starten. Mit anderen Worten, wenn Sie die Aktivität starten und der Dienst ausgeführt wird, werden in der Benutzeroberfläche der Aktivität einige Statusmeldungen angezeigt, wenn etwas Interessantes passiert. Wenn Sie die Aktivität nicht starten, werden diese Nachrichten nicht angezeigt (sie sind nicht so interessant).
Es scheint, als sollte ich feststellen können, ob der Dienst ausgeführt wird, und wenn ja, die Aktivität als Listener hinzufügen. Entfernen Sie dann die Aktivität als Listener, wenn die Aktivität angehalten oder gestoppt wird. Ist das eigentlich möglich? Die einzige Möglichkeit, dies herauszufinden, besteht darin, dass die Aktivität Parcelable implementiert und eine AIDL-Datei erstellt, damit ich sie über die Remote-Schnittstelle des Dienstes weiterleiten kann. Das scheint jedoch übertrieben zu sein, und ich habe keine Ahnung, wie die Aktivität writeToParcel () / readFromParcel () implementieren soll.
Gibt es einen einfacheren oder besseren Weg? Vielen Dank für jede Hilfe.
BEARBEITEN:
Für alle, die sich später dafür interessieren, gibt es im Beispielverzeichnis einen Beispielcode von Google, der dies über AIDL handhabt: /apis/app/RemoteService.java
busy-wait
die Aktivität? Kannst du bitte erklären ?