Normalerweise implementiere ich beim Erstellen eines Android-Dienstes die onCreate
Methode, aber in meinem letzten Projekt funktioniert dies nicht. Ich habe versucht zu implementieren onStartCommand
, und das scheint zu funktionieren.
Die Frage ist: Wenn ich einen Dienst implementieren muss, welche Methode ist erforderlich? Welche Methoden muss ich implementieren? onCreate
, onStartCommand
Oder beides? Und welche Rolle spielt jeder?
android
android-service
oncreate
GVillani82
quelle
quelle
onCreate
wird immer genanntAntworten:
onCreate()
wird aufgerufen, wenn dasService
Objekt instanziiert wird (dh wenn der Dienst erstellt wird ). Sie sollten in dieser Methode Dinge tun, die Sie nur einmal tun müssen (z. B. einige Variablen initialisieren usw.).onCreate()
wird immer nur einmal pro instanziiertem Objekt aufgerufen .Sie müssen nur implementieren,
onCreate()
wenn Sie etwas nur einmal initialisieren möchten / müssen .onStartCommand()
wird jedes Mal aufgerufen, wenn ein Client den Dienst mit startetstartService(Intent intent)
. Dies bedeutet, dassonStartCommand()
mehrfach aufgerufen werden kann. Sie sollten die Dinge in dieser Methode tun, die jedes Mal benötigt werden, wenn ein Client etwas von Ihrem Service anfordert. Dies hängt stark davon ab, was Ihr Service tut und wie er mit den Kunden kommuniziert (und umgekehrt).Wenn Sie nicht implementieren
onStartCommand()
, können Sie keine Informationen von demIntent
Client abrufen, an den der Client übergibt,onStartCommand()
und Ihr Dienst kann möglicherweise keine nützliche Arbeit leisten.quelle
startService()
und der Dienst nicht ausgeführt wird, erstellt Android eine Instanz der Dienstklasse (dies ist ein Dienstobjekt) und ruftonCreate()
dieses Objekt dann auf. Es wird dannonStartCommand()
dieses Objekt aufrufen . Wenn Sie einige Zeit später erneut anrufenstartService()
und der Dienst noch ausgeführt wird, erstellt Android kein neues Dienstobjekt. Stattdessen wird nuronStartCommand()
das vorhandene Serviceobjekt aufgerufen . Ist das klar?und wann immer das
service
mit startService aufgerufen wird .onStartCommand
wird angerufen werden. und Sie können jede auszuführende Aktion übergeben. Wie bei einem Musikplayer können Sie spielen, pausieren und die Aktion beendenUnd Sie tun dies,
operation in service
indem Sie eine Aktion senden und weiterleitenonStartCommand
onCreate
arbeite wie ein Konstruktor.Kurz bearbeiten
onCreate()
Anrufe nur zum ersten Mal, wenn Sie einen starten,Service
währendonStartCommand()
Anrufe jedes Mal, wenn Sie denstartService
erneut anrufen . Damit können Sie eine Aktion wie Abspielen, Stoppen, Musik anhalten einstellen.quelle