¿Qué sucede exactamente cuando se quita una tarea de los últimos?

Me di cuenta de un comportamiento sorprendente al eliminar una aplicación del conmutador de aplicaciones mediante swiping. La aplicación tiene un servicio. Cuando la aplicación se "mata", los subprocesos iniciados desde el servicio se mantienen en ejecución, se terminan otros subprocesos.

Lo que es realmente sorprendente es que el sistema puede determinar qué subprocesos se iniciaron desde el servicio, incluso si intento ocultar el origen del subproceso de esta manera:

  • En el método onCreate () del servicio, coloque una ejecución en el controlador de subproceso principal.
  • El runnable comienza un nuevo hilo que sobrevive a la eliminación de los últimos.

Si publico exactamente el mismo runnable al mismo manejador, pero de una actividad, el hilo no sobrevive. ¿Cómo puede saber el sistema? ¿De alguna manera pista de qué hilo fue el runnable publicado?

Editar: Según lo solicitado, el método onCreate ():

@Override public void onCreate() { super.onCreate(); new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { @Override public void run() { new Thread(){ @Override public void run() { while (true) { System.out.println("hello from thread"); try { Thread.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); } } } }.start(); } }, 1000); } 

Finalmente se enteró de lo que sucede. El sistema no elimina de forma selectiva los subprocesos sin servicio, mata la aplicación completa y luego reinicia el servicio, por lo que parece que los subprocesos del servicio no han sido modificados.

Sólo quiero echar algo de luz sobre esto.

Los componentes de Android son ajenos a los subprocesos que no crearon. Así, mientras que IntentService se ocupará del subproceso que creó para el uso de onHandleIntent () , un servicio regular no prestará atención a los hilos que usted mismo fork.

Una vez que un servicio es destruido, cualquier hilo que se escapa continuará ejecutándose, hasta que Android termine el proceso.

Si sus hilos se detienen inesperadamente, eso no tiene nada que ver con el Servicio – de nuevo, el Servicio no sabe nada de los hilos que usted mismo fork.

De referencias,

Se cierra la aplicación de la misma manera presionando una y otra vez hace. A veces, eso también mata sus procesos de fondo, pero a veces no:

Eliminar una entrada en tareas recientes eliminará cualquier proceso en segundo plano que exista para el proceso. No hará que los servicios se detengan directamente, sin embargo hay una API para ellos para descubrir que la tarea fue quitada para decidir si quieren que esto signifique que deben parar. Esto es así que eliminar, digamos, la tarea reciente de una aplicación de correo electrónico no hará que deje de buscar correo electrónico.

Si realmente desea detener completamente una aplicación, puede presionar largo sobre las tareas recientes para ir a la información de la aplicación, y golpear la fuerza parar allí. La parada de la fuerza es una eliminación completa de la aplicación: todos los procesos se eliminan, se detienen todos los servicios, se eliminan todas las notificaciones, se eliminan todas las alarmas, etc. La aplicación no se permite reiniciar hasta que se solicite explícitamente.

Así que, básicamente, depende de la aplicación decidir, y depende de cómo se codificó la aplicación. Vale la pena ver la pantalla en Configuración> Aplicaciones> Ejecución para ver cómo actúa cada aplicación

Por favor, consulte el enlace refrence más abajo para más información.

Enlaces de Refrence: –

http://lifehacker.com/what-happens-when-you-remove-an-app-from-androids-mult-1179868228

http://www.howtogeek.com/169549/what-exactly-happens-when-you-swipe-an-android-app-from-the-recent-apps-list/

https://plus.google.com/+DianneHackborn/posts/GfwRYCC42uX

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.