Wann wird ein gestarteter und gebundener Service zerstört?
Ging ich durch die services-Dokumentation in der android-als ich bemerkte zwei einander widersprechende Punkte:
In der services-Dokument ist festgelegt in Verwalten des Lebenszyklus eines Service
Diese beiden Wege sind nicht vollständig getrennt. Das heißt, Sie können eine Bindung zu einem
service begann schon mit startService(). Zum Beispiel, eine
hintergrund-Musik-Dienst kann gestartet werden durch Aufruf von startService()
mit einer Absicht, die die Musik zu spielen. Später, möglicherweise, wenn
der Benutzer will die übung eine gewisse Kontrolle über den Spieler oder bekommen
Informationen über den aktuellen song, eine Aktivität binden können, um die
service durch Aufruf von bindService(). In Fällen wie diesem, stopService() oder
stopSelf() nicht wirklich beenden Sie den Dienst, bis alle clients
unbind.
Aber im Dokument über gebundene Dienstleistungen in Verwalten des Lebenszyklus eines Gebundenen Service
Allerdings, wenn Sie wählen, um die Umsetzung der onStartCommand () - callback
- Methode, dann müssen Sie explizit den Dienst beenden, da der service
ist jetzt betrachtet zu werden begann. In diesem Fall, der service läuft bis
der Dienst beendet sich mit stopSelf() oder einer anderen Komponente aufruft
stopService(), unabhängig davon, ob es gebunden ist, zu jedem Kunden.
Kann es mir aber ich denke, die Aussagen sind widersprüchlich.Könnte bitte jemand klären...
InformationsquelleAutor der Frage anz | 2013-06-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich beide Absätze ergänzen (auch wenn Ihre Wortwahl vielleicht falsch), und beide Absätze sind im Einklang mit dem Bild der Dokumentation. Lassen Sie uns einen Blick:
Die Quintessenz ist: Wenn Sie einen Dienst starten, dann binden Sie ein client, um es dann versuchen, ihn zu stoppen, wird der Dienst nicht beendet (zerstört), bevor alle clients zuordnen. Der zweite Absatz widerspricht nicht, es verfeinert diese Aussage.
Bedeutet dies: A gestartet und gebundener service läuft auch, wenn keine Kunden gebunden sind, bis es explizit gestoppt wird. Zugegeben, die Formulierung dürfte wohl ein wenig klarer. Die lifecycle-Diagramm gegeben, in der Dokumentation jedoch zeigt dieses (und ich bin mir ziemlich sicher, dass ich bereits beobachtet, das in "real-life", ich bin zwar derzeit keine direkte Beispiel auf der Spitze von meinem Kopf):
InformationsquelleAutor der Antwort Stephan
Damit einverstanden, dass die Dokumentation könnte klarer sein. Das, was Sie versuchen zu sagen ist:
Erstellt eine sehr einfache Aktivität und Dienst und lief die folgenden Sequenzen von start/stop/bind/unbind. Ich habe beobachtet, dass das telefonieren brachte folgende Ergebnisse.
bind-Bindung
start-bind-Bindung-halt
start-bind-Stopp-Bindung
binden-start-Stopp-Bindung
binden-start-unbind-stop
Wie Sie sehen können, in jedem Fall, wo beide binden und starten Sie genannt wurden, den Dienst in Betrieb gehalten, bis sich beide trennen und stoppen Sie genannt wurden. Die Reihenfolge der Bindung/stop ist nicht wichtig.
Hier ist der Beispiel-code, der aufgerufen wurde, die von der separaten Tasten in meinem einfachen test app:
InformationsquelleAutor der Antwort Chuck Krutsinger
Yep, es funktioniert.
Ich möchte abschließen mit einem Beispiel-code :
Hatte ich eine app machen, mit einem service gestartet, durch eine Tätigkeit, die Tätigkeit zu nennen, dass einige Methoden in den Dienst, die Dienste im hintergrund laufen, auch wenn die Aktivität wurden getötet, und wenn die Aktivität startet, es nicht den Dienst neu zu starten, wenn es ausgeführt wird. Ich hoffe, es wird Ihnen helfen, Sie können sehen, wie es funktioniert mit dem Anmelden.
So das ist der code :
InformationsquelleAutor der Antwort Cocorico