¿Qué le sucede a un programa en ejecución cuando se presiona el botón "inicio" en el teléfono Android?


27

Una cosa me desconcierta. Parece que si uso algún programa en Android y presiono el botón "Inicio", veo la pantalla de inicio y puedo volver a ejecutar el programa y ver ese programa en el mismo estado que antes, por lo que parece que el programa no se reinició por completo, simplemente suspendido y luego reanudado.

Sin embargo, eso no parece suceder consistentemente con el juego Air Control. A veces, cuando estoy jugando Air Control y presiono "home" y luego vuelvo a ejecutar Air Control, está en pausa (como si presionara el botón "pausa") y puedo reanudar el juego. A veces, lo mismo lleva a Air Control a abandonar el juego y comenzar de nuevo.

Entonces parece que no entiendo algo.

¿Cuál es el trato aquí? ¿Qué le sucede a un programa cuando se presiona "home"? ¿Sigue funcionando o qué hace?


Dudo que presionar el botón de inicio resulte en un mayor consumo de energía.
Flujo

Respuestas:


12

Al presionar los Homebotones, se pasa de la aplicación a la pantalla de inicio, mientras la aplicación se ejecuta en segundo plano. Esto es un poco como cambiar entre ventanas en una PC con Windows.

Excepto que cuando su teléfono se esté quedando sin recursos, como memoria, comenzará a cerrar aplicaciones que se ejecutan en segundo plano, de modo que su teléfono tenga suficientes recursos para lo que está tratando de hacer ahora. Los juegos suelen estar entre las primeras aplicaciones que el teléfono "matará" para ahorrar recursos, ya que a menudo usan mucha más memoria y CPU que otras aplicaciones. Es por eso que a veces tu juego aún se está ejecutando en pausa, y a veces Android lo ha cerrado por ti.

El Backbotón es la forma de cerrar aplicaciones para que estén realmente cerradas.

Consulte también ¿Cuál es la forma correcta de cerrar aplicaciones en Android?


26

El documento de Desarrollo de Android Tareas y Back Stack en realidad cubre esto bastante bien. Un extracto relevante:

Una tarea es una unidad cohesiva que puede moverse al "fondo" cuando los usuarios comienzan una nueva tarea o van a la pantalla de Inicio, a través de la tecla INICIO. Mientras está en segundo plano, todas las actividades de la tarea se detienen, pero la pila de tareas para la tarea permanece intacta: la tarea simplemente ha perdido el foco mientras se lleva a cabo otra tarea, como se muestra en la figura 2. Una tarea puede volver al " primer plano "para que los usuarios puedan continuar donde lo dejaron. Supongamos, por ejemplo, que la tarea actual (Tarea A) tiene tres actividades en su pila, dos bajo la actividad actual. El usuario presiona la tecla INICIO, luego inicia una nueva aplicación desde el iniciador de aplicaciones. Cuando aparece la pantalla de inicio, la tarea A pasa a segundo plano. Cuando se inicia la nueva aplicación, el sistema inicia una tarea para esa aplicación (Tarea B) con su propia pila de actividades. Después de interactuar con esa aplicación, el usuario regresa a Inicio nuevamente y selecciona la aplicación que originalmente inició la Tarea A. Ahora, la Tarea A pasa a primer plano: las tres actividades en su pila están intactas y se reanuda la actividad en la parte superior de la pila. En este punto, el usuario también puede volver a la Tarea B yendo a Inicio y seleccionando el icono de la aplicación que inició esa tarea (o tocando y manteniendo presionada la tecla INICIO para revelar tareas recientes y seleccionando una). Este es un ejemplo de multitarea en Android. el usuario también puede volver a la Tarea B yendo a Inicio y seleccionando el icono de la aplicación que inició esa tarea (o tocando y manteniendo presionada la tecla INICIO para revelar tareas recientes y seleccionando una). Este es un ejemplo de multitarea en Android. el usuario también puede volver a la Tarea B yendo a Inicio y seleccionando el icono de la aplicación que inició esa tarea (o tocando y manteniendo presionada la tecla INICIO para revelar tareas recientes y seleccionando una). Este es un ejemplo de multitarea en Android.

Nota: Se pueden mantener varias tareas en segundo plano a la vez. Sin embargo, si el usuario ejecuta muchas tareas en segundo plano al mismo tiempo, el sistema podría comenzar a destruir las actividades en segundo plano para recuperar la memoria, lo que provocaría la pérdida de los estados de actividad. Consulte la siguiente sección sobre el estado de la actividad.

Resumen : la tarea se mueve a un segundo plano cuando presiona Homey se queda en la memoria, sin hacer realmente nada y conservando su estado. Esto significa que (en general) puede volver a la tarea y continuará donde se quedó. Sin embargo, el sistema Android puede, y lo hará, matar tareas en segundo plano si necesita recuperar memoria. Cuándo y si esto sucede depende completamente del sistema, y ​​probablemente sea por eso que ve un comportamiento inconsistente al reanudar.

Si el sistema destruye la tarea, tendrá que volver a crearla cuando la inicie nuevamente. Entonces, a menos que el autor de la aplicación haya tomado medidas para guardar el estado de la aplicación durante el proceso de destrucción, se perderá (y guardar el estado exacto en cosas como los juegos es bastante poco práctico).

Otro documento bueno (pero también detallado) es el que cubre el ciclo de vida de la actividad (hay un buen diagrama de flujo si se desplaza un poco hacia abajo).


Por lo tanto, se eliminan por tarea, no por actividad / proceso. Esto último permitiría matar tareas parciales, lo que probablemente no sea deseable.
jiggunjer

4

Al presionar la tecla Inicio, el usuario puede iniciar una nueva tarea, mostrando el iniciador. Todas las tareas activas (y, por lo tanto, las actividades, incluido su ejemplo de "Control de aire") llamarán a su onPause()método.

Depende de la aplicación (y su actividad) restaurar el estado anterior exacto cuando vuelva a estar visible. También es posible que el proceso de aplicaciones se elimine mientras la actividad está en segundo plano, pero esto no debería afectar la experiencia de los usuarios. El usuario no debería ser capaz de distinguir si una Actividad se detuvo o si también se eliminó. Esto podría explicar el comportamiento diferente de Air Control, que podría ser un indicio de una implementación defectuosa de la gestión del ciclo de vida de Android.


Creo que por "asesinado" te refieres a detenido, en lugar de destruido. Creo en la terminología normal de Linux cuando eliminas un proceso (por ejemplo, Actividad) y destroy()los componentes de la aplicación correspondientes.
jiggunjer

No, quiero decir destruido.
Flujo

Cuando presiona la tecla de inicio onStop, se llama al método. Un proceso cancelado no significa que la actividad obtenga su onDestroyedmétodo, aunque sí es similar. "Matar" un proceso de Actividad significa que la VM se elimina de la RAM. Para mí, esto (Android matándolo) parece afectar la experiencia del usuario.
jiggunjer

4

Mi reputación todavía es muy baja en este sitio para votar, así que estoy respondiendo para enfatizar la respuesta de Flow. Me encuentro con este problema en una de mis aplicaciones. Tengo varios controles giratorios y tienes que guardar explícitamente su estado en onPause () y luego restaurar los estados en onResume () - Android no recuerda sus estados automáticamente.

Otra complicación es que a veces Android llamará a la función onCreate () de una aplicación cuando solo esperas que llame a onResume ().

Por lo tanto, su problema con Air Control (o cualquier otra aplicación) es específico de esa aplicación y debe informar el comportamiento al desarrollador para su corrección. La mayoría de las aplicaciones tienen un correo electrónico de contacto en el mercado.

Por cierto, si desea comprender el ciclo de vida de la aplicación, le recomiendo el Capítulo 2 de Hello, Android de Ed Burnette, especialmente la figura 2.3.


3

Botón de inicio presionado cuando está en una aplicación:

La mayoría de las aplicaciones guardarán su estado (cualquier bit de datos que se necesitaría para mantenerse coherente cuando se reanude), y el dispositivo cambiará a la aplicación de inicio.

Botón de inicio Presionado cuando está en las pantallas de inicio:

Esto es configurable por muchos lanzadores de terceros; sin embargo, muchos de ellos predeterminan el regreso a la pantalla de inicio "principal" (el iniciador predeterminado hace esto).

Lo que podría preocupar a tu amigo:

El cambio de aplicaciones puede consumir mucha memoria y hacer que varias escrituras en disco guarden los datos. Esto usa batería; sin embargo, generalmente no es la causa principal del agotamiento de la batería en los dispositivos (los sistemas operativos están optimizados para hacer estas cosas).

Algunas aplicaciones continuarán ejecutándose como una aplicación en segundo plano, por lo que presionar el botón de inicio no las eliminará (por ejemplo, Google Play Music seguirá reproduciéndose después de presionar el botón de inicio).

Su amigo podría estar preocupado de que al presionar el botón de inicio no haya salido del programa y, por lo tanto, todavía se está ejecutando. Android descargará esas aplicaciones según sea necesario.

Usted y su amigo deberían preocuparse más por la pantalla, que utiliza la mayor cantidad de energía.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.