Cuando desliza una aplicación de su lista de aplicaciones en ejecución de Android, ¿qué sucede exactamente con la aplicación y los datos? Siga leyendo mientras investigamos.
La sesión de preguntas y respuestas de hoy nos llega por cortesía de Android Enthusiast, una subdivisión de Stack Exchange, un grupo de sitios web de preguntas y respuestas impulsado por la comunidad.
La pregunta
El lector entusiasta de Android, Eldarerathis, siente curiosidad por la función de deslizamiento de aplicaciones que le permite abrir su lista de aplicaciones en ejecución a través del botón de inicio y luego deslizarlas hacia la derecha, presumiblemente para cerrarlas:
La lista de aplicaciones recientes en Ice Cream Sandwich agregó la capacidad de deslizar aplicaciones fuera de la lista, descartándolas permanentemente (y hasta donde yo sé, esta es una función básica, no una CM / ROM personalizada). La documentación y los aspectos más destacados de la plataforma no parecen cubrir el funcionamiento interno de esta funcionalidad, pero tengo curiosidad por saber qué está haciendo realmente el sistema.
Para aumentar mi curiosidad, decidí hacer una prueba rápida: inicié Music en una instalación de CM9 y luego salí de ella. Luego revisé la lista de aplicaciones recientes y vi que efectivamente estaba allí (y en el estado correcto, según la miniatura). Luego entré en
Configuración-> Aplicacionesy detuvo a la fuerza la aplicación Música, pero aún figuraba en la lista reciente, lo que me llevó a creer que no está conectada a procesos que persisten en segundo plano.Al darme cuenta ahora de que la música puede haber sido una mala elección, también probé con la aplicación USA Today. Esto exhibió básicamente el mismo comportamiento, y parecía que se vio obligado a "relanzarse" después de la detención forzada (lo cual tiene sentido), aunque la miniatura en la lista de aplicaciones recientes no reflejaba esto (¿en caché, supongo?).
Entonces, ¿qué sucede realmente en el nivel del sistema operativo cuando desliza una aplicación fuera de la lista reciente? ¿Simplemente borra los datos de la aplicación de la RAM y la basura los recolecta, destruyendo su estado guardado?
¿Qué sucede exactamente cuando borras la aplicación de la lista?
Las respuestas
El colaborador entusiasta de Android Austin Mills ofrece algunas ideas:
Deslizar aplicaciones de la lista de aplicaciones recientes es sencillo, y sí, no está bien documentado. Este ha sido el tema de una cantidad decente de discusión en varios foros de Android ... el consenso parece estar mejor descrito aquí en algunos comentarios : que el comportamiento es similar pero no exactamente el mismo que cerrar una aplicación; en general (para aplicaciones que no definen el manejo explícito del botón de retroceso) es lo mismo que devolver el golpe suficientes veces desde dentro de una aplicación de la que sale eso.
El enlace tiene más detalles sobre los detalles, pero en general, puede pensar en ello como salir de la aplicación.
Específicamente para la aplicación Música, creo que inicia un servicio, por lo que aunque la tarea en sí (la aplicación Música / UI) puede estar cerrada, el servicio continúa ejecutándose en segundo plano para que su música no se detenga repentinamente solo porque la tarea se borró por motivos de gestión de memoria. Eso puede haber afectado lo que vio.
Luego, participando en el círculo de preguntas y respuestas de la vida, Eldarerathis regresó con algunas investigaciones propias para completar la respuesta:
Parece que encontré los términos de búsqueda mágicos que llevaron a algunas explicaciones de los empleados de Google. Específicamente, encontré un par de lugares diferentes donde Dianne Hackborn explica lo que sucede cuando sacas algo de la lista reciente. El primero es un comentario en una de sus publicaciones de Google+ :
[W] lo que sucede específicamente cuando desliza una tarea reciente es: (1) elimina cualquier proceso en segundo plano o vacío de la aplicación (consulte aquí por lo que esto significa), y (2) usa el nuevo FUEGO para informar a los servicios de la aplicación sobre la tarea que se está eliminando para que pueda hacer lo que considere apropiado.
Ella también notas en un comentario de blog :
En realidad, eliminar una entrada en tareas recientes matará cualquier proceso en segundo plano que exista para el proceso. No hará que los servicios se detengan directamente, sin embargo, hay una API para que averigüen que la tarea se eliminó para decidir si quieren que esto signifique que deben detenerse. Esto es para que, por ejemplo, eliminar la tarea reciente de una aplicación de correo electrónico no hará que deje de buscar correo electrónico.
Si realmente desea detener una aplicación por completo, puede presionar prolongadamente las tareas recientes para ir a la información de la aplicación y presionar forzar detención allí. Forzar la detención es una eliminación completa de la aplicación: se eliminan todos los procesos, se detienen todos los servicios, se eliminan todas las notificaciones, se eliminan todas las alarmas, etc. No se permite que la aplicación se inicie nuevamente hasta que se solicite explícitamente.
Entonces, parece que el resumen es que deslizar una aplicación fuera de la lista primero matará todos los procesos en segundo plano para la aplicación, luego usará
onTaskRemovedpara notificar a la aplicación que se eliminó la tarea en segundo plano. En ese momento, parece que depende de la aplicación decidir qué sucede, así que supongo que técnicamente no es una regla estricta sobre lo que le sucede a la aplicación más allá de ese punto.