Was ist der Unterschied zwischen START_STICKY
und START_NOT_STICKY
während der Implementierung von Diensten in Android? Könnte jemand auf einige Standardbeispiele hinweisen ..?
quelle
Was ist der Unterschied zwischen START_STICKY
und START_NOT_STICKY
während der Implementierung von Diensten in Android? Könnte jemand auf einige Standardbeispiele hinweisen ..?
Beide Codes sind nur relevant, wenn dem Telefon der Speicher ausgeht und der Dienst beendet wird, bevor die Ausführung abgeschlossen ist. START_STICKY
Weist das Betriebssystem an, den Dienst neu zu erstellen, nachdem er über genügend Speicher verfügt, und ihn onStartCommand()
erneut mit einer Null-Absicht aufzurufen . START_NOT_STICKY
Weist das Betriebssystem an, den Dienst nicht erneut zu erstellen. Es gibt auch einen dritten Code START_REDELIVER_INTENT
, der das Betriebssystem anweist, den Dienst neu zu erstellen und die gleiche Absicht erneut zu liefern onStartCommand()
.
Dieser Artikel von Dianne Hackborn erklärte den Hintergrund viel besser als die offizielle Dokumentation.
Quelle: http://android-developers.blogspot.com.au/2010/02/service-api-changes-starting-with.html
Der Schlüsselteil hier ist ein neuer Ergebniscode, der von der Funktion zurückgegeben wird und dem System mitteilt, was es mit dem Dienst tun soll, wenn sein Prozess während der Ausführung beendet wird:
START_STICKY entspricht im Wesentlichen dem vorherigen Verhalten, bei dem der Dienst "gestartet" bleibt und später vom System neu gestartet wird. Der einzige Unterschied zu früheren Versionen der Plattform besteht darin, dass onStartCommand () bei einem Neustart aufgrund eines gestoppten Prozesses bei der nächsten Instanz des Dienstes mit einer Null-Absicht aufgerufen wird, anstatt überhaupt nicht aufgerufen zu werden. Dienste, die diesen Modus verwenden, sollten immer nach diesem Fall suchen und angemessen damit umgehen.
START_NOT_STICKY gibt an, dass nach der Rückkehr von onStartCreated () der Dienst gestoppt und nicht neu gestartet wird, wenn der Prozess ohne verbleibende Startbefehle beendet wird. Dies ist viel sinnvoller für Dienste, die nur ausgeführt werden sollen, während an sie gesendete Befehle ausgeführt werden. Beispielsweise kann ein Dienst alle 15 Minuten von einem Alarm aus gestartet werden, um einen Netzwerkstatus abzufragen. Wenn es während dieser Arbeit getötet wird, ist es am besten, es einfach anzuhalten und beim nächsten Alarm auszulösen.
START_REDELIVER_INTENT ist wie START_NOT_STICKY, außer wenn der Prozess des Dienstes abgebrochen wird, bevor stopSelf () für eine bestimmte Absicht aufgerufen wird, wird diese Absicht erneut an ihn gesendet, bis er abgeschlossen ist (es sei denn, nach einigen weiteren Versuchen kann er immer noch nicht abgeschlossen werden). an welchem Punkt das System aufgibt). Dies ist nützlich für Dienste, die Arbeitsbefehle erhalten und sicherstellen möchten, dass sie die Arbeit für jeden gesendeten Befehl schließlich abschließen.
START_NOT_STICKY
?START_REDELIVER_INTENT
istSTART_NOT_STICKY
. Stattdessen ist es wieSTART_STICKY
KISS Antwort
Unterschied:
START_STICKY
Das System versucht, Ihren Dienst neu zu erstellen, nachdem er beendet wurde
START_NOT_STICKY
Das System versucht nicht , Ihren Dienst neu zu erstellen, nachdem er beendet wurde
Standardbeispiel:
quelle
START_REDELIVER_INTENT
. Ich habe geradeSTART_STICKY
die App mit den neuesten Apps getestet und beendet. Dann ruft es den Service zurück. AberSTART_REDELIVER_INTENT
nie wieder angerufen. Warum?Die Dokumentation für
START_STICKY
undSTART_NOT_STICKY
ist recht unkompliziert.START_STICKY:
Beispiel: Beispiel für einen lokalen Dienst
START_NOT_STICKY:
Beispiel: ServiceStartArguments.java
quelle