¿Cuál es la diferencia entre START_STICKY
y START_NOT_STICKY
al implementar servicios en Android? ¿Alguien podría señalar algunos ejemplos estándar ...?
fuente
¿Cuál es la diferencia entre START_STICKY
y START_NOT_STICKY
al implementar servicios en Android? ¿Alguien podría señalar algunos ejemplos estándar ...?
Ambos códigos solo son relevantes cuando el teléfono se queda sin memoria y mata el servicio antes de que termine de ejecutarse. START_STICKY
le dice al sistema operativo que onStartCommand()
vuelva a crear el servicio después de que tenga suficiente memoria y vuelva a llamar con una intención nula. START_NOT_STICKY
le dice al sistema operativo que no se moleste en recrear el servicio nuevamente. También hay un tercer código START_REDELIVER_INTENT
que le dice al sistema operativo que vuelva a crear el servicio y vuelva a entregar la misma intención onStartCommand()
.
Este artículo de Dianne Hackborn explica mucho mejor los antecedentes de esto que la documentación oficial.
Fuente: http://android-developers.blogspot.com.au/2010/02/service-api-changes-starting-with.html
La parte clave aquí es un nuevo código de resultado devuelto por la función, que le dice al sistema qué debe hacer con el servicio si su proceso se anula mientras se está ejecutando:
START_STICKY es básicamente el mismo comportamiento anterior, donde el servicio se deja "iniciado" y luego el sistema lo reiniciará. La única diferencia con respecto a las versiones anteriores de la plataforma es que si se reinicia porque su proceso se cancela, se llamará a onStartCommand () en la próxima instancia del servicio con un Intento nulo en lugar de no ser llamado en absoluto. Los servicios que usan este modo siempre deben verificar este caso y tratarlo adecuadamente.
START_NOT_STICKY dice que, después de regresar de onStartCreated (), si el proceso finaliza sin que queden comandos de inicio, el servicio se detendrá en lugar de reiniciarse. Esto tiene mucho más sentido para los servicios que están destinados a ejecutarse solo mientras se ejecutan los comandos que se les envían. Por ejemplo, se puede iniciar un servicio cada 15 minutos desde una alarma para sondear algún estado de la red. Si se mata mientras se hace ese trabajo, lo mejor sería dejar que se detenga y comenzar la próxima vez que se active la alarma.
START_REDELIVER_INTENT es como START_NOT_STICKY, excepto si el proceso del servicio se cancela antes de que llame a stopSelf () para un intento determinado, ese intento se volverá a entregar hasta que se complete (a menos que después de varios intentos más aún no pueda completarse, en ese punto el sistema se da por vencido). Esto es útil para los servicios que reciben comandos de trabajo y desean asegurarse de que eventualmente completen el trabajo para cada comando enviado.
START_NOT_STICKY
?START_REDELIVER_INTENT
sea asíSTART_NOT_STICKY
. En cambio, es comoSTART_STICKY
BESO respuesta
Diferencia:
START_STICKY
el sistema intentará recrear su servicio después de que se elimine
START_NOT_STICKY
el sistema no intentará volver a crear su servicio después de que se elimine
Ejemplo estándar:
fuente
START_REDELIVER_INTENT
. Acabo de probarSTART_STICKY
y eliminar la aplicación con aplicaciones recientes. Entonces recuerda el servicio. PeroSTART_REDELIVER_INTENT
nunca volvió a llamar. ¿Por qué?La documentación para
START_STICKY
ySTART_NOT_STICKY
es bastante sencilla.START_STICKY:
Ejemplo: muestra de servicio local
START_NOT_STICKY:
Ejemplo: ServiceStartArguments.java
fuente