¿Puede existir un servicio de fondo sin su aplicación principal?

Vamos a examinar el siguiente escenario:

  1. He creado una nueva aplicación para Android, con una clase de aplicación, actividad y un servicio de fondo.
  2. Tengo alguna variable static en la clase de aplicación, digamos que es un int i = 0;
  3. Comienzo la activity , y comienzo el service del onCreate() de la actividad onCreate() , el servicio consigue el indicador de START_STICKY .
  4. Todo lo que este service hace es usar TimerTask para escribir el segundo actual a la variable en la clase de aplicación. 5.I salir de la actividad
  5. Después de un tiempo, Android eliminará el servicio y la aplicación (digamos que el dispositivo tiene pocos recursos) y reinicia el servicio debido al indicador START_STICKY .

Ahora tengo preguntas:

  1. ¿Es la situación cuando el OS mata la aplicación, pero no mata el servicio?
  2. Cuando el servicio es reiniciado por el sistema, ¿se reiniciará la aplicación también? En caso afirmativo, ¿qué contexto tendrá, y si no, cómo podría ser, que haya un servicio que se ejecuta sin su aplicación?

Gracias, lo siento por mi inglés terrible …

3 Solutions collect form web for “¿Puede existir un servicio de fondo sin su aplicación principal?”

1. ¿Existe una situación en la que OS kill es la aplicación, pero no mata el servicio?

Tl; dr: Sí, esto es posible. Sin embargo, el Service debe iniciarse en su propio proceso.

Explicación:

Es importante darse cuenta de que el sistema operativo Android mata procesos cuando se está agotando la memoria, no componentes individuales , como Activities o Services ( consulte esta respuesta ).

Dada la declaración anterior, está claro que un Service puede existir independientemente de la Application sólo si están contenidos en procesos separados. De lo contrario, serán destruidos juntos cuando su proceso sea destruido.

Ahora considere el caso del Service y la Application existentes en procesos separados. En Android, los procesos se destruyen en situaciones de poca memoria de menor a mayor prioridad. El orden de prioridad es: Vaciar <Fondo <Servicio <Visible <Primer plano ( ver aquí ). Por lo tanto, es posible que su Application se destruya mientras su Service permanezca vivo (por ejemplo, si su Aplicación está en segundo plano) y también es posible que su Service sea ​​destruido mientras su Aplicación permanezca viva.

Puede declarar cualquier componente (Actividad, Servicio, Proveedor de contenido, etc.) de una aplicación para ejecutarse en su propio proceso definiendo el atributo android:process en la etiqueta de manifiesto de componentes.

De la documentación oficial de Procesos :

De forma predeterminada, todos los componentes de la misma aplicación se ejecutan en el mismo proceso y la mayoría de las aplicaciones no deben cambiar esto. Sin embargo, la entrada de manifiesto para cada tipo de elemento componente: Activity , Service , Receiver y Provider , soporta un atributo android:process que puede especificar un proceso en el que ese componente debería ejecutarse. Puede establecer este atributo para que cada componente se ejecute en su propio proceso o para que algunos componentes compartan un proceso mientras que otros no lo hacen. […] El elemento Application también soporta un atributo android: process, para establecer un valor por defecto que se aplica a todos los componentes.


2. Cuando el sistema reinicie el servicio, ¿se reiniciará la aplicación también?

Esto está relacionado con la respuesta en la pregunta 1.

Si el Service existe en el mismo proceso que la Application , ambos serán destruidos y reiniciados juntos.

Si el Service existe en un proceso separado como la Application entonces son procesos completamente separados, y por lo tanto serán destruidos y reiniciados independientemente uno del otro como el SO Android considere apropiado.

¿Es la situación cuando el sistema operativo va a matar la aplicación, pero no va a matar el servicio?

Sí, hay tal situación, por lo general los servicios matarán después de la actividad, ya que exigen los últimos recursos del Sistema leen Documentos aquí

Cuando el servicio es reiniciado por el sistema, ¿se reiniciará la aplicación también?

No estoy seguro de eso, pero creo que no porque el servicio puede vivir sin la referencia de la aplicación

La respuesta de Tomer Mor no es correcta.

Cuando su Application muere, su Service también muere.

Su Service sólo se creará después de su Application . Esto se puede observar registrando su onCreate() .

  • ¿Es posible ejecutar mi servicio por tiempo indefinido?
  • OnServiceConnected nunca llamado después del método bindService
  • Android: Cómo detener el servicio de música de mi aplicación, si otra aplicación reproduce música.
  • Diseño de hilos múltiples de Android Service
  • Depurar servicio de fondo en android utilizando intelliJ
  • Servicio de Android - URL de ping
  • El micrófono Android no funciona cuando se utiliza por otra aplicación en el servicio de fondo
  • ¿Cuál es la forma correcta de detener un servicio que se está ejecutando como primer plano
  • Reconocimiento de voz como servicio de fondo
  • Servicio de Android que no recibe Actualizaciones de ubicación
  • Servicio con cola de prioridad en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.