¿Cuál es la diferencia entre START_STICKYy START_NOT_STICKYal implementar servicios en Android? ¿Alguien podría señalar algunos ejemplos estándar ...?
fuente
¿Cuál es la diferencia entre START_STICKYy START_NOT_STICKYal 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_STICKYle 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_STICKYle dice al sistema operativo que no se moleste en recrear el servicio nuevamente. También hay un tercer código START_REDELIVER_INTENTque 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_INTENTsea asíSTART_NOT_STICKY. En cambio, es comoSTART_STICKYBESO respuesta
Diferencia:
START_STICKYel sistema intentará recrear su servicio después de que se elimine
START_NOT_STICKYel sistema no intentará volver a crear su servicio después de que se elimine
Ejemplo estándar:
fuente
START_REDELIVER_INTENT. Acabo de probarSTART_STICKYy eliminar la aplicación con aplicaciones recientes. Entonces recuerda el servicio. PeroSTART_REDELIVER_INTENTnunca volvió a llamar. ¿Por qué?La documentación para
START_STICKYySTART_NOT_STICKYes bastante sencilla.START_STICKY:
Ejemplo: muestra de servicio local
START_NOT_STICKY:
Ejemplo: ServiceStartArguments.java
fuente