Activity: Evitar guardar en la pila (Back Stack)

jueves, 28 de julio de 2011 Etiquetas: , , , ,

Introducción

Esta entrada como la anterior habla sobre como manipular un comportamiento de una Activity[2], en esta caso el comportamiento que nos interesa modificar es que no se guarde en la pila (Back Stack), donde se van almacenando las diferentes activities que va ejecutando nuestra aplicación. En mi caso tengo una actividad que muestra una pantalla de login, una vez se ha introducido el password correcto inicia una nueva Activity[2]. Cuando pulsa el botón de atrás no quería que saliera de nuevo la pantalla de login sino que saliera de la aplicación

Como ya es el segundo tema sobre activities en dos días voy a empezar a contar algo sobre estas clases, así veremos algo sobre su funcionamiento y la solución que he encontrado, no se si la más correcta, para el problema de evitar que se almacene en la Back Stack.

[28.03.2013] Esta entrada esta bien para ver como funciona el ciclo de vida de una actividad. Si quieres ver como hacer que no se guarde una Activity en la Back Stack mejor mira este otro post.



Activities. Visión General.
Una Activity[2] se puede considerar como la unidad principal que utilizaremos para realizar nuestra aplicación, ya que nos permite la interactuación con el usuario. También hay Activities sin formulario, pero lo más normal que usemos esta clase para mostrar o recibir información.

Crear una nueva actividad es tan sencillo como heredar de la clase Activity[2], el único método que debemos sobre escribir obligatoriamente es OnCreate. Una vez hecho esto ya tenemos nuestra actividad creada y lista para se ejecutada.

Back Stack
Como he comentado antes, Android cuando se crea una nueva Activity guarda su estado (posición pantalla, datos...) y la almacena en una pila tipo LIFO (El último que entra es el primero que sale). Así cuando pulsas el botón de atrás se libera la actividad actual y muestra la anterior que había en la pila restaurando su estado.

Cada aplicación mantiene su propia pila de histórico, para así poder retroceder las actividades que va ejecutando. En la siguiente figura podemos ver un ejemplo de funcionamiento, sacada de la página de Android[1], donde además podemos encontrar una explicación más completa del funcionamiento de la pila de histórico.

Figura 1. Funcionamiento de la Back Stack

Ciclo de Vida
Cuando se crea una actividad pasa a primer plano, en lo alto de la Back Stack, como hemos visto en el apartado anterior. Si se llama a una nueva actividad esta pasa a primer plano y a lo mas alto de la pila. La primera actividad pasa a un segundo plano en estado de parado, guardando su estado por si es necesario volver al primer plano cuando se pulsa la tecla atrás. El ciclo de vida completo lo podemos ver en el siguiente gráfico(sacado de la página de Android[2])

Figura 2. Ciclo de vida de una actividad
Como podemos ver en el gráfico del ciclo de vida cuando se crea una nueva actividad la actividad inicial pasa a segundo plano y a estado de parado. En la figura 2 vemos que pasa se ejecutan los eventos onPause() y onStop(). Sobre escribimos este último para finalizar la actividad y que no este disponible cuando se vuelva hacía atrás. No se si es la mejor forma de hacerlo, pero por ahora es la forma que he encontrado de hacerlo y me funciona bien. Vamos a ver el ejemplo:

        @Override
 public void onStop(){
  super.onStop(); 
  this.finish();
 }

Hay que tener en cuenta que la ejecución de this.finish(); no finaliza el flujo de ejecución del método, si hubiese más código después de esta sentencia se ejecutaría.

Blibliografía
[1]Android dev Guide(2011) Tasks and Back Stack (en inglés) Consulta Julio 2011.
[2]Android Reference(2011) Activity(en inglés) Consulta Julio 2011.

0 comentarios:

Publicar un comentario