149 votos

¿Qué es lo que realmente sucede cuando sacas una aplicación de la lista de aplicaciones recientes?

La reciente lista de aplicaciones en Ice Cream Sandwich añadió la posibilidad de eliminar aplicaciones de la lista, desestimándolas de forma permanente (y por lo que sé, es una función de vainilla, no de CM/rom personalizada). La documentación y los aspectos destacados de la plataforma no parecen cubrir el funcionamiento de esta funcionalidad, pero tengo curiosidad por saber lo que el sistema está haciendo realmente.

Para aumentar mi curiosidad, decidí hacer una prueba rápida: Inicié la música en una instalación de CM9, y luego me retiré de ella. Luego revisé la lista de aplicaciones recientes y vi que sí estaba ahí (y en el estado adecuado, según la miniatura). Luego entré en Settings->Applications y la fuerza detuvieron la aplicación de música, pero aún estaba en la lista reciente, lo que me lleva a creer que no está conectado a los procesos que perduran en el fondo.

Dándome cuenta ahora de que la música puede haber sido una mala elección, también probé con la aplicación USA Today. Esta exhibía básicamente el mismo comportamiento, y parecía que se veía obligada a "relanzarse" después de la parada forzada (lo cual tiene sentido) aunque la miniatura de la lista de aplicaciones recientes no reflejaba esto (en caché, supongo?).

Entonces, ¿qué sucede realmente en el nivel del sistema operativo cuando se pasa una aplicación de la lista reciente? ¿Simplemente borra los datos de la aplicación de la RAM y la basura los recoge, destruyendo su estado guardado?

78voto

David Negron Puntos 971

Parece que encontré los términos mágicos de búsqueda que llevaron a algunas explicaciones de los empleados de Google. Específicamente, encontré un par de lugares diferentes donde Dianne Hackborn explica lo que pasa cuando se pasa algo de la lista reciente. El primero es un comentario en una de sus publicaciones de Google+ :

Lo que ocurre específicamente cuando se roba una tarea reciente es que..: 1) mata cualquier fondo o procesos vacíos de la aplicación (véase http://developer.Android.com/guide/topics/fundamentals/processes-and-threads.html#Lifecycle para lo que esto significa), y (2) utiliza el nuevo http://developer.Android.com/reference/Android/app/Service.html#onTaskRemoved(Android.content.Intent) API para informar a cualquier servicio de la aplicación sobre la tarea que está para que pueda hacer lo que crea conveniente.

Ella también notas en un comentario de blog :

En realidad, eliminar una entrada en las tareas recientes matará cualquier fondo procesos que existen para el proceso. No causará directamente servicios para detener, sin embargo hay una API para que puedan encontrar la se quitó la tarea para decidir si quieren que esto signifique que deben parar. Esto es para que la eliminación de digamos la reciente tarea de una aplicación de correo electrónico no porque dejó de buscar el correo electrónico.

Si realmente quieres detener completamente una aplicación, puedes presionar largo tiempo en tareas recientes para ir a la información de la aplicación, y la fuerza del golpe se detiene allí. Porque "stop" es una completa eliminación de la aplicación todos los procesos se eliminan, todos los servicios detenido, todas las notificaciones eliminadas, todas las alarmas eliminadas, etc. La aplicación no se le permite lanzar de nuevo hasta que se le solicite explícitamente.

Por lo tanto, parece que el resumen es que al borrar una aplicación de la lista primero se matan todos los procesos de fondo de la aplicación, y luego se utiliza onTaskRemoved para notificar a la aplicación que la tarea de fondo fue eliminada. En ese momento parece que depende de la aplicación decidir qué pasa, así que supongo que técnicamente no es una regla dura y rápida sobre lo que pasa con la aplicación más allá de ese punto.

68voto

t3rse Puntos 5983

Sacar las aplicaciones de la lista de aplicaciones recientes es una locura, 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 ser el mejor descrito aquí en algunos comentarios que el comportamiento es similar pero no exactamente el mismo que cerrar una aplicación en general (para las aplicaciones que no definen explícitamente el manejo del botón de retroceso) es lo mismo que retroceder suficientes veces desde dentro de una aplicación para salir de ella.

El enlace tiene algunos detalles más sobre los detalles, pero en general se puede pensar que es como abandonar la aplicación.

Específicamente para la aplicación Música, creo que inicia un servicio, así que mientras la tarea en sí (la aplicación Música/UI) puede estar cerrada, el servicio sigue funcionando en segundo plano para que tu música no se detenga de repente sólo porque la tarea se haya borrado por razones de gestión de la memoria. Eso puede haber afectado lo que viste.

21voto

Chris Roberts Puntos 7543

Hay algo de información en el código fuente de las clases com.Android.política.interna.implícitaRecientesAplicacionesAntecedentes y com.Android.política.interna.implícitaRecienteAplicacionesDiálogo .

Si leo esto correctamente, hay manejadores específicos para seleccionar las aplicaciones pero nada especial para pasarlas, excepto por onDetachedFromWindow() que llama com.android.View.onDetachedFromWindow() que básicamente oculta el elemento y borra sus datos. Esto podría sugerir el hecho de que no pasa nada especial al pasar la aplicación, lo que se corresponde con la respuesta de Austin Mills, porque como la lista no muestra la aplicación activa, el onPause() y otras llamadas al sistema que se hacen cuando se "abandona" una aplicación ya han ocurrido.

10voto

Leandros Puntos 610

Creo que hará lo mismo que el botón de regreso. Excepto un pequeño cambio. Lo hará. finish() toda la actividad / fragmentos en la aplicación.

Acabo de hacer una pequeña prueba con una pequeña aplicación de autoconstrucción. Tú también puedes probar. Aquí está mi aplicación de prueba: https://bitbucket.org/Leandros99/lifecycletest (descarga disponible, también. Para los que no pueden construir.)
En cada método del ciclo de vida de la actividad ( http://developer.Android.com/reference/Android/app/Activity.html#ActivityLifecycle ) imprime un registro de la aplicación. Puedes verlo con adb logcat (instala Android SDK, cd a las herramientas de la plataforma en cmd / shell y escribe adb logcat . Ahora verás, cada vez que hagas algo como pulsar el botón de regreso o el de inicio, la aplicación imprime el método del ciclo de vida, mencionado anteriormente).

Tu pregunta: Si robo una aplicación del cajón de aplicaciones recientes, el onDestroy se llamará método. Hace casi lo mismo que el botón de regreso.
Espero haber ayudado un poco. Si hay preguntas, sólo pregunte.

3voto

user3067986 Puntos 11

Cierra la aplicación, y sus datos se almacenan en la RAM. De esta manera, te da más espacio de RAM para que puedas ejecutar otras aplicaciones.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X