¿Está garantizado un servicio android para llamar a onDestroy ()?

El diagrama de ciclo de vida de una Actividad en un android no garantiza que se llamará onDestroy (), pero que el proceso puede ser eliminado y la Actividad se elimina abruptamente. El diagrama de ciclo de vida de un Servicio en un androide garantiza que se llamará onDestroy (). Así que tengo dos preguntas relacionadas con esta diferencia.

En primer lugar, si el Servicio es parte del mismo proceso que la Actividad, ¿se llama el servicio onDestroy (), aunque no se llama a Actividad onDestroy ()? Yo creo que no, como "matar a un proceso" sugieren que el sistema operativo está deteniendo sus hilos y liberar sus recursos.

Y si ese es el caso, ¿se puede matar abruptamente el sistema operativo?

No estoy seguro de dónde está viendo que un servicio está garantizado para tener onDestroy() llamado. Por lo que sé, este no es el caso. Si lee esta página de los documentos, se describen las condiciones en las que un servicio podría ser eliminado. Así que si usted está preguntando si un proceso que aloja tanto una actividad como un servicio está siendo asesinado, onDestroy() será llamado en el servicio (pero no en la actividad) entonces la respuesta es no; Un onDestroy() no será necesariamente llamado. En cuanto a si un sistema de servicio sólo puede ser abruptamente asesinado por el sistema operativo: sí, puede. Esto es especialmente cierto cuando se tiene mucho trabajo que hacer, y su llamada onStartCommand solo pone en cola el trabajo para realizar de forma asincrónica. Entonces el servicio estará pasando la mayoría de su tiempo no en los onCreate protegidos onCreate , onStartCommand o onDestroy .

Hay dos cosas a considerar:

  1. Android podría decidir cerrar un proceso en algún momento, cuando la memoria es baja y requerida por otros procesos que son más inmediatos al usuario. Los componentes de la aplicación que se ejecutan en el proceso que se ha matado son destruidos en consecuencia. Se vuelve a iniciar un proceso para esos componentes cuando vuelva a haber trabajo para ellos. En este caso onDestroy() no se llama como Android OS reclamará recursos de todos modos (esto es tarea básica de OS en general – en caso de que no lo sepa).
  2. Un servicio puede iniciarse y tener conexiones vinculadas a él. En tal caso, el sistema mantendrá el servicio funcionando siempre que se inicie o haya una o más conexiones con el indicador Context.BIND_AUTO_CREATE. Una vez que ninguna de estas situaciones se cumple, el método onDestroy () del servicio es llamado y el servicio se termina de manera efectiva. Todas las operaciones de limpieza (detención de subprocesos, cancelación de registros de receptores) deben completarse al regresar de onDestroy (). Así que cuando Android OS ve que el servicio ha terminado su trabajo y ya no es necesario – será destoryed por Android OS. El sistema operativo Android ofrece al desarrollador la oportunidad de liberar los recursos del Servicio para no causar pérdida de memoria. En este caso onDestroy() se llama como este es el lugar donde el desarrollador puede liberar los recursos. Por supuesto, en este caso, el proceso de la aplicación permanece intacto (ya que puede haber otros Servicios / Actividades ejecutándose en él).
  • ¿Por qué no Service.onStop método?
  • Razones por las que la intención pasada sería NULL en onStartCommand
  • ¿Puede iniciar un IntentService en un proceso separado?
  • Si android reinicia un servicio es onCreate llamado de nuevo?
  • OnStart () y onStartCommand () siguen llamados en 2.0 y superiores
  • Utilizando IntentService para la reproducción de MediaPlayer
  • Reproductor de medios de Android con servicio
  • Espere con la operación hasta que se creen Vistas de fragmentos
  • Android O: Servicio no detenido por límites de ejecución de fondo
  • ¿Cómo comprobar es la aplicación en primer plano de servicio?
  • Uso de Service, TimerTask y BroadcastReceiver para comprobar si hay varias actualizaciones
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.