27 votos

¿Qué ocurre con un programa en ejecución cuando se pulsa el botón "home" en un teléfono Android?

Hay una cosa que me desconcierta. Parece que si uso algún programa en Android y pulso el botón "home" veo la pantalla de inicio y puedo volver a ejecutar el programa y ver ese programa en el mismo estado que estaba antes - así que parece que el programa no se reinicia completamente, sólo se suspende y luego se reanuda.

Sin embargo, eso no parece ocurrir de forma constante con el juego Air Control. A veces, cuando estoy jugando a Air Control y pulso "home" y más tarde vuelvo a ejecutar Air Control, se pone en pausa (como si hubiera pulsado el botón "pause") y puedo reanudar el juego. A veces lo mismo hace que Air Control deje de jugar y comience de nuevo.

Así que parece que no entiendo algo.

¿Qué pasa aquí? ¿Qué ocurre con un programa cuando se pulsa "home"? ¿Sigue funcionando o qué hace?

27voto

David Negron Puntos 971

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

Una tarea es una unidad cohesionada que puede pasar al "fondo" cuando los usuarios comienzan una nueva tarea o van a la pantalla de inicio, a través de la tecla HOME. Mientras está en fondo, todas las actividades de la tarea se detienen, pero la pila de fondo de la tarea permanece intacta: la tarea simplemente ha perdido el foco mientras se realiza otra tarea, como se muestra en la figura 2. Una tarea puede entonces 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 pulsa la tecla HOME, luego inicia una nueva aplicación desde el lanzador de aplicaciones. Cuando aparece la pantalla de inicio, la tarea A pasa a en 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 vuelve a Inicio y selecciona la aplicación que originalmente inició la Tarea A. Ahora, la Tarea A pasa a primer plano: las tres actividades de su pila están intactas y la actividad en la parte superior de la pila se reanuda. En este momento, el usuario también puede volver a la Tarea B yendo a Inicio y seleccionando el icono de la icono de la aplicación que inició esa tarea (o manteniendo pulsada la tecla la tecla HOME para mostrar las tareas recientes y seleccionar 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 está ejecutando muchas tareas en segundo plano al mismo tiempo, el sistema podría empezar a destruir las actividades en segundo plano para recuperar memoria, haciendo que se pierdan los estados de actividad. Consulte la siguiente sección sobre el estado de actividad.

Resumen : La tarea pasa a un segundo plano cuando se pulsa Home y se queda en la memoria, sin hacer realmente nada y conservando su estado. Esto significa que (en general) se puede volver a la tarea y ésta continuará donde la dejó. Sin embargo, el sistema Android puede -y lo hará- matar las tareas en segundo plano si necesita recuperar memoria. Cuándo y si esto ocurre depende enteramente del sistema, y es probablemente la razón por la que ves un comportamiento inconsistente al reanudar.

Si la tarea es destruida por el sistema, tendrá que volver a crearse cuando la lances de nuevo. Así que, 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 exacto estado en cosas como los juegos es bastante poco práctico).

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

12voto

Joe Shaw Puntos 6386

Al pulsar la tecla Home te cambia de la aplicación a la pantalla de inicio, mientras deja tu aplicación funcionando en segundo plano. Esto es un poco como cambiar entre Windows en un PC con Windows.

Pero cuando el teléfono se está quedando sin recursos, como la memoria, empezará a cerrar las aplicaciones que se estén ejecutando en segundo plano, para que el teléfono tenga suficientes recursos para lo que está intentando hacer ahora. Los juegos suelen estar entre las primeras aplicaciones que el teléfono "mata" para ahorrar recursos, ya que suelen utilizar mucha más memoria y CPU que otras aplicaciones. Por eso a veces tu juego sigue ejecutándose en pausa, y a veces Android lo ha cerrado por ti.

El Back es la forma de cerrar las aplicaciones para que realmente se cierren.

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

4voto

Flow Puntos 14132

Al pulsar la tecla Clave de la casa permite al usuario iniciar una nueva Tarea, mostrando el lanzador. Todas las Tareas activas (y por lo tanto las Actividades incluyendo su ejemplo de "Control Aéreo") llamarán a su onPause() método.

Corresponde a la aplicación (y a su actividad) restablecer el estado anterior exacto cuando vuelva a ser visible. También es posible que el proceso de la aplicación sea eliminado 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 notar la diferencia si una Actividad fue simplemente pausada o si también fue eliminada. Esto podría explicar el diferente comportamiento de Air Control que podría ser un indicio de una implementación defectuosa de la gestión del ciclo de vida de Android.

4voto

Gdalya Puntos 409

Mi reputación es todavía demasiado baja en este sitio para votar, así que respondo para enfatizar la respuesta de Flow. Me encuentro con este problema en una de mis aplicaciones. Tengo varios controles de giro 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 sólo se espera que llame a onResume().

Así que tu problema con Air Control (o con cualquier otra aplicación) es específico de esa aplicación y deberías informar del comportamiento al desarrollador para que lo corrija. La mayoría de las aplicaciones tienen un correo electrónico de contacto en el Market.

Por cierto, si quieres entender el ciclo de vida de las aplicaciones, te recomiendo el capítulo 2 de Hello, Android de Ed Burnette, especialmente la figura 2.3.

3voto

Dylan Yaga Puntos 2012

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

La mayoría de las aplicaciones guardarán su estado (cualquier dato que sea necesario para mantenerse consistente cuando se reanude), y el dispositivo cambiará a la aplicación de lanzamiento.

Botón de inicio Se pulsa cuando se está en las pantallas de inicio:

Esto es configurable por muchos lanzadores de terceros; sin embargo, muchos de ellos te llevan por defecto a tu pantalla de inicio "principal" (el lanzador por defecto lo hace).

Lo que puede preocupar a tu amigo:

El cambio de aplicaciones puede consumir mucha memoria y provocar varias escrituras en el disco para guardar los datos. Esto consume batería; sin embargo, no suele ser la principal causa de agotamiento de la batería en los dispositivos (los sistemas operativos están optimizados para hacer estas cosas).

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

A tu amigo le puede preocupar que al pulsar el botón de inicio no hayas salido del programa y, por tanto, éste siga funcionando. Android descargará esas aplicaciones cuando sea necesario.

Tú y tu amigo deberíais preocuparos más por la pantalla, que es la que más energía consume.

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