Ich stelle eine ärgerliche Frage, die (teilweise, meiner Meinung nach) adressiert wurde: hier und hier . Nehmen wir an, wir möchten in vielen Beispielen eine Musikanwendung erstellen, die beispielsweise eine einzelne Aktivität und einen Dienst verwendet. Wir möchten, dass der Service beibehalten wird, wenn die Aktivität gestoppt oder zerstört wird. Diese Art von Lebenszyklus schlägt einen gestarteten Dienst vor:
Ein Dienst wird "gestartet", wenn eine Anwendungskomponente (wie z. B. ein Aktivität) startet es durch Aufruf von startService (). Einmal gestartet, ein Service kann unbegrenzt im Hintergrund laufen, auch wenn die Komponente gestartet wurde es zerstört
Ok, aber wir wollen auch mit dem Service kommunizieren können, also brauchen wir eine Service-Bindung. Kein Problem, wir haben sowohl einen gebundenen als auch einen gestarteten Service, wie diese Antwort suggeriert :
So weit, so gut, aber ein Problem ergibt sich aus der Tatsache, dass wenn die Aktivität beginnt, wir nicht wissen, ob der Dienst in der Nähe ist oder nicht. Es wurde möglicherweise begonnen oder es ist möglicherweise nicht gewesen. Die Antwort könnte etwas wie sein:
startService()
und binden Sie dann daran. Diese Idee basiert auf einem bestimmten Lesen der Dokumente für bindService()
:
Verbinden Sie sich mit einem Anwendungsdienst und erstellen Sie ihn bei Bedarf.
Wenn Null-Flag bedeutet "Service wird nicht wirklich benötigt" als wir sind OK. Also versuchen wir etwas mit dem folgenden Code:
%Vor%Und was wir bekommen ist eine erfolgreiche Bindung jedes Mal:
%Vor%Die globale Frage lautet: "Bin ich falsch verstanden, gebundene oder begonnene Dienste und wie verwende ich sie?" Speziellere Fragen sind:
bindService()
übergeben wurde, bedeutet "Starten Sie den Dienst nicht"? Wenn nicht, gibt es keine Möglichkeit, bindService()
aufzurufen, ohne den Dienst zu starten? bindService()
true
zurück, auch wenn der Dienst nicht ausgeführt wird? In diesem Fall scheint der Dienst nicht gestartet worden zu sein, basierend auf Log
calls. bindService()
ist, gibt es eine Problemumgehung (d. h. irgendwie sicherstellen, dass startService
nur aufgerufen wird, wenn der Service nicht läuft?) P.S. Ich habe von dem Problem in meinem eigenen Code weitergemacht: Ich gebe startService()
Aufrufe unabhängig aus, da wiederholte startService()
einfach ignoriert werden. Trotzdem würde ich die Probleme gerne noch besser verstehen.
Ich stelle eine ärgerliche Frage, die (teilweise, meiner Meinung nach) adressiert wurde: hier und hier . Nehmen wir an, wir möchten in vielen Beispielen eine Musikanwendung erstellen, die beispielsweise eine einzelne Aktivität und einen Dienst verwendet. Wir möchten, dass der Service beibehalten wird, wenn die Aktivität gestoppt oder zerstört wird. Diese Art von Lebenszyklus schlägt einen gestarteten Dienst vor:
Ein Dienst wird "gestartet", wenn eine Anwendungskomponente (wie z. B. ein Aktivität) startet es durch Aufruf von startService (). Einmal gestartet, ein Service kann unbegrenzt im Hintergrund laufen, auch wenn die Komponente gestartet wurde es zerstört
Ok, aber wir wollen auch mit dem Service kommunizieren können, also brauchen wir eine Service-Bindung. Kein Problem, wir haben sowohl einen gebundenen als auch einen gestarteten Service, wie diese Antwort suggeriert :
So weit, so gut, aber ein Problem ergibt sich aus der Tatsache, dass wenn die Aktivität beginnt, wir nicht wissen, ob der Dienst in der Nähe ist oder nicht. Es wurde möglicherweise begonnen oder es ist möglicherweise nicht gewesen. Die Antwort könnte etwas wie sein:
Diese Idee basiert auf einem bestimmten Lesen der Dokumente für %code% :
Verbinden Sie sich mit einem Anwendungsdienst und erstellen Sie ihn bei Bedarf.
Wenn Null-Flag bedeutet "Service wird nicht wirklich benötigt" als wir sind OK. Also versuchen wir etwas mit dem folgenden Code:
%Vor%Und was wir bekommen ist eine erfolgreiche Bindung jedes Mal:
%Vor%Die globale Frage lautet: "Bin ich falsch verstanden, gebundene oder begonnene Dienste und wie verwende ich sie?" Speziellere Fragen sind:
P.S. Ich habe von dem Problem in meinem eigenen Code weitergemacht: Ich gebe %code% Aufrufe unabhängig aus, da wiederholte %code% einfach ignoriert werden. Trotzdem würde ich die Probleme gerne noch besser verstehen.