La lista de aplicaciones recientes en Ice Cream Sandwich agregó la capacidad de deslizar aplicaciones fuera de la lista, descartándolas así de forma permanente (y hasta donde yo sé, esta es una función estándar, no una de CM/ROM personalizada). La documentación y los aspectos destacados de la plataforma no parecen cubrir el funcionamiento oculto de esta funcionalidad, pero tengo curiosidad por saber qué está haciendo realmente el sistema.
Para aumentar aún más mi curiosidad, decidí hacer una prueba rápida: inicié Música en una instalación de CM9 y luego me retiré. Luego revisé la lista de aplicaciones recientes y vi que efectivamente estaba allí (y en el estado adecuado, según la miniatura). Luego entré Settings->Applications
y forcé la detención de la aplicación Música, pero aún figuraba en la lista reciente, lo que me hizo creer que no está conectada a procesos persistentes en segundo plano.
Al darme cuenta ahora de que 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 "reiniciar" 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 de la lista reciente? ¿Simplemente borra los datos de la aplicación de la memoria RAM y los recolecta como basura, destruyendo su estado guardado?
Deslizar aplicaciones fuera de la lista de aplicaciones recientes es simple, y sí, no está bien documentado. Este ha sido el tema de una buena cantidad 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 igual que cerrar una aplicación, en general ( para las aplicaciones que no definen el manejo explícito 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 más detalles sobre los detalles, pero en general puede pensar que es 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/IU) 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 razones de administración de memoria. Eso puede haber afectado lo que viste.
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 qué sucede cuando deslizas algo de la lista reciente. El primero es un comentario en una de sus publicaciones de Google+ :
[L]o que sucede específicamente cuando deslizas una tarea reciente es: (1) elimina cualquier fondo o procesos vacíos de la aplicación (ver http://developer.android.com/guide/topics/fundamentals/processes-and- threads.html#Lifecycle para lo que esto significa), y (2) utiliza la nueva http://developer.android.com/reference/android/app/Service.html#onTaskRemoved(android.content.Intent) API para indicar cualquier servicios de la aplicación sobre la tarea que se está eliminando para que pueda hacer lo que considere apropiado.
Ella también señala en un comentario de blog :
En realidad, eliminar una entrada en las 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 que descubran que la tarea se eliminó y decidan si quieren que esto signifique que deben detenerse. Esto es para que eliminar, digamos, la tarea reciente de una aplicación de correo electrónico no haga 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 la detención allí. Porque detener es eliminar por completo la aplicación: todos los procesos se eliminan, todos los servicios se detienen, todas las notificaciones se eliminan, todas las alarmas se eliminan, etc. No se permite que la aplicación vuelva a iniciarse hasta que se solicite explícitamente.
Por lo tanto, parece que el resumen es que deslizar una aplicación fuera de la lista eliminará primero todos los procesos en segundo plano para la aplicación y luego se usará onTaskRemoved
para notificar a la aplicación que se eliminó la tarea en segundo plano. En ese punto, parece que depende de la aplicación decidir qué sucede, así que supongo que técnicamente no hay una regla estricta sobre lo que le sucede a la aplicación más allá de ese punto.
Hay algo de información en el código fuente en las clases com.android.internal.policy.impl.RecentApplicationsBackground y com.android.internal.policy.impl.RecentApplicationsDialog .
Si los leo correctamente, hay controladores específicos para seleccionar las aplicaciones, pero nada especial para deslizarlas, excepto onDetachedFromWindow()
, que llama, lo com.android.View.onDetachedFromWindow()
que básicamente oculta el elemento y borra sus datos. Esto insinuaría el hecho de que no sucede nada especial al deslizar la aplicación, lo que corresponde con la respuesta de Austin Mills, porque dado que la lista no muestra la aplicación activa, las onPause()
llamadas al sistema y otras que se realizan al "salir" de una aplicación tienen ya pasó.
Creo que hará lo mismo que el botón Atrás. Excepto un pequeño cambio. Será 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. También puedes probar. Aquí está mi aplicación de prueba: https://bitbucket.org/Leandros99/lifecycletest (descarga disponible también. Para aquellos que no pueden construir).
En cada método de ciclo de vida de actividad ( http://developer.android.com/reference/android/app /Activity.html#ActivityLifecycle ) imprima un registro de la aplicación. Puede verlo con adb logcat (instale Android SDK, cd a herramientas de plataforma en cmd / shell y escriba adb logcat
. Ahora verá, cada vez que hace algo como presionar el botón Atrás o Inicio, la aplicación imprime el método de ciclo de vida, mencionado anteriormente. )
Tu pregunta: si deslizo una aplicación del cajón de aplicaciones recientes, onDestroy
se llamará al método. Hace casi lo mismo que el botón Atrás.
Espero haber ayudado un poco. Si hay preguntas, solo pregunte.
Cierra la aplicación y sus datos que se almacenan en la RAM. Por lo tanto, le brinda más espacio de RAM para que pueda ejecutar otras aplicaciones. Sin embargo, los servicios en segundo plano NO se fuerzan a cerrar automáticamente como resultado de cerrar la aplicación en uso.
eldarerathis
eldarerathis
cerveza inglesa
Boris Strandjev
Suerte