Wenn ich folgenden Code habe:
Intent intent = new Intent(this,DownloadService.class);
for(int i=0;i<filesArray.length;i++){
startService(intent);
}
In diesem Code DownloadService
erweitert IntentService
.
Wenn ich jetzt anrufe startService(intent)
, bedeutet dies, dass ich jedes Mal einen neuen Dienst starte, wenn er startService(intent)
aufgerufen wird, oder bedeutet dies, dass er DownloadService
einmal ausgeführt wird und jedes Mal, wenn ich startService(intent)
ihn anrufe, eine andere Absicht mit einer anderen Start-ID übergeben wird.
Ist das sinnvoll und welches davon ist der Fall?
onCreate()
wenn der Dienst bereits erstellt wurde). Es sollte leicht zu bestimmen sein, ob SieLog.i()
in beide Rückrufe ein eingeben und das LogCat überprüfen.startService()
es asynchron ist. Während Sie die Anrufe schleifen, hat der Dienst selbst keine Ressourcen erhalten und wurde noch nicht gestartet.Absolut korrekt. Für einen Bewerbungsprozess wird nur eine Service-Instanz erstellt. Und wenn Sie
StartService();
erneut aufrufen , wird nuronStartCommand()
aufgerufen und eine neue Absicht an dieonStartCommand()
Methode übergeben.Hinweis:
onCreate()
wird nicht erneut aufgerufen.bindService()
Mehrfaches Anrufen :Wenn Sie
bindService()
mehrmals aufrufen , wird erneut nur eine Instanz für den Dienst verwendet, und Android Runtime gibt dasselbe IBinder-Objekt an den Client zurück.Bedeutet,
onBind()
wird nicht mehrfach aufgerufen. Und nur das zwischengespeicherte IBinder-Objekt wird zurückgegeben.quelle
onStop()
für jeden Korrespondenten aufgerufen werdenonStartCommand
?Das Hinzufügen weiterer Informationen zu den obigen Antworten, die für andere hilfreich sein können, besteht darin,
startId
dass dieonStartCommand()
empfangene Methode für jedenstartService()
Aufruf anders ist .Auch wenn wir wie oben erwähnt in eine for-Schleife schreiben, wird der eingeschriebene Code
onHandleIntent()
so oft ausgeführt, wie durch die Frequenz der for-Schleife definiert, jedoch nacheinander und nicht parallel.Das Konzept besteht darin,
IntentService
eine Arbeitswarteschlange und jedestartService()
auszulösende Anforderung zu erstellen,onStartCommand()
die wiederum die Absicht in der Arbeitswarteschlange speichert und die Absicht dann einzeln an weiterleitetonHandleIntent()
.quelle
Laut dem Dokument :
und
quelle