Actividad Android

Las actividades Android son las clases que nos van a permitir hacer cada «pantalla» de la aplicación. Hay distintas clases que se han ido liberando con las actualizaciones de Android en aras de mantener la retrocompatibilidad, pero todas se comportan, a grandes rasgos, de la misma manera.

Contienen el método setContentView que nos va a permitir cargar un layout que hayamos definido previamente. Puedes ver la explicación en el apartado diseño de aplicaciones en Android Studio. Además, también va a incorporar una serie de métodos callback que nos van a permitir controlar lo que ocurre en cada momento siempre y cuando conozcamos el ciclo de vida de una actividad Android.

Ciclo vida Actividad Android

Como hemos comentado, las actividades tienen un ciclo de ejecución automático en el que, dependiendo del estado y el momento de la ejecución en que se encuentre, ejecutará un método u otro. Hay una serie de métodos de tipo callback que se ejecutan en determinados momentos del tiempo que la actividad esté cargada en memoria (o «viva»). Veamos el siguiente gráfico:

ciclo vida actividad android, ciclo actividad android

Como podemos ver, cuando lanzamos la actividad por primera vez, llegamos al método onCreate, después, automáticamente se llamará al método onStart y luego al onResume. En cualquiera de estos es donde se suelen poner las instrucciones corerspondientes al inicio de la actividad: todas las inicializaciones de variables, instanciaciones de objetos visuales y la carga del layout.

Una vez todos estos métodos se han ejecutado, la actividad quedará en modo visible, es decir, está visible en la pantalla en primer plano, el usuario puede interactuar con ella desde ese momento.

Luego pueden pasar varias cosas, como que otra actividad se ponga en primer plano, o la pantalla se apague: en este caso, la actividad pasará al estado pausada, pero antes se ejecutará el método onPause. De manera similar, si la app ha sido destruida, pasará por el onPause y después por el onStop y onDestroy. Estos métodos nos pueden servir para guardar información en el último momento antes de que la actividad sea destruida por completo.

El diagrama parece complejo, pero es muy fácil de seguir, además puedes ver las pruebas de cómo la ejecución salta a los métodos callback en el vídeo que te pongo al final de este apartado.

Crear actividad en Android Studio

Para empezar a utilizar una actividad en Android Studio hay que seguir una serie de pasos fundamentales si no quieres que la app dé errores y se cierre inesperadamente.

Declarar la Activity en el manifest

Este paso se suele olvidar muchas veces y es causante de que las aplicaciones den error. Para poder utilizar una actividad, primero hay que declararla en el Android Manifest, para ello tendrás que usar las etiquetas <activity> del XML.

Ponerle un filtro (opcional)

Es posible poner filtros a las actividades para que escuchen eventos y reaccionen a ellos autoejecutándose. Ya hablamos en lecciones anteriores del filtro de lanzamiento, pero podemos poner filtros de escucha a otro tipo de eventos, como por ejemplo, llamadas de otras aplicaciones.

Lanzar actividad Android

Salvo para aquella que hayamos definido como la primera en ejecutarse (a través del filtro de lanzamiento), el resto de actividades de nuestro aplicativo han de ser invocadas por otras para poder ejecutarse, para eso utilizaremos la instrucción
startActivity.

Invocación de funcionalides del sistema

El sistema android tiene sus propias aplicaciones a las que podemos invocar utilizando los intents adecuados. Así, por ejemplo, desde nuestra propia app podemos invocar a la app de Gmail, o, también, lanzar la cámara o el navegador. Este tipo de funcionalidades solucionan muchos problemas y aligeran la carga de dificultad de nuestra aplicación, al poder invocar estas otras apps con la intención de esperar un resultado. En este caso, las invocaciones se realizarán con la instrucción startActivityForResult.

Finalizar Actividad

Para finalizar una actividad porque ya no queremos usarla más, debemos borrarla de la pila. Las actividades se van «apilando» una encima de la otra, de manera que cuando una muere, la que estaba «debajo» pasará a primer plano. Si una actividad estaba en la pila y se invoca desde otra, pasará a primer plano, pero no se creará de nuevo (es decir, no se ejecutará el método onCreate). Es importante tener este tipo de cosas en cuenta para no perder el control de nuestra app.

Si queremos matar la actividad en curso, basta con llamar a la función finish().

Esto es todo en cuanto a actividades a nivel teórico. Hay muchas otras cosas que se pueden hacer, pero se salen de la intención de este curso para principiantes. Si quieres ver todo esto en vídeo, te dejo aquí mi explicación en el curso de Youtube.

Comunicación entre actividades Android

El paso de parámetros de una actividad a otra en Android es una funcionalidad que nos va a permitir compartir información entre pantallas sin que el usuario tenga que volverlas a poner una y otra vez. Piensa, por ejemplo, en una app que te ofrezca restaurantes a una determinada distancia máxima de ti. En una actividad pediríamos la distancia y, al darle a un botón, abriríamos un mapa con los restaurantes a esa distancia. Esto es posible al pasar datos entre actividades android.

Cómo pasar tipos simples de datos entre actividades

El caso más básico que vamos a aprender aquí es el de pasar tipos simples de datos (int, float, String) entre dos actividades de nuestra app. Para ello vamos a necesitar un objeto auxiliar, un Intent. Ese intent se cargará con pares clave-valor que serán los parámetros.

  • La clave siempre será de tipo String, es el identificador de nuestro dato.
  • El valor será un tipo simple de datos: int, String, etc.

Instanciamos el Intent nuevo y luego utilizaremos el método putExtra para cada uno de los valores que queramos traspasar.

De manera análoga, en la actividad receptora conseguiremos el intent con getIntent().get[loquesea]Extra, donde lo que sea es el tipo del valor, por ejemplo: getIntExtra(). A este método habría que pasarle el String de la clave del valor.

Esto que acabamos de ver podría considerarse un paso de valores «hacia delante», es decir, una actividad previa pasa el valor a una posterior. Sin embargo, como comentábamos antes, también se pueden hacer pasos de valores «hacia atrás», es decir, una actividad previa lanza una posterior con el objetivo de recibir un valor cuando esta termine. Por ejemplo, imaginemos que estamos calculando el precio de un viaje de varios días. Podríamos ir abriendo actividades desde una principal con el precio y en las que se van abriendo ir añadiendo costes por día. Así, finalmente en la actividad inicial podríamos tener el coste total del viaje.

Este tipo de funcionamiento se consigue usando la instrucción startActivityForResult. Para que el ciclo funcione correctamente hay que cumplir las siguientes premisas:

  • La actividad inicial lanza la nueva con la instrucción startActivityForResult.
  • Cuando la nueva actividad termina, establece un valor para setResult, que consta de un flag que determina si todo ha ido bien (ACTIVITY_OK) y el valor a devolver (un tipo simple de dato).
  • La primera actividad recoge el resultado justo al volver al primer plano, a través del método callback onActivityResult.

Es posible enviar objetos entre actividades, pero lo dejaremos para un capítulo posterior. Te dejo el vídeo en el que lo explico todo en el curso para que veas un ejemplo práctico. Hablo de todo esto hasta el minuto 23.

¿Ya lo has probado? ¿Tienes algún tipo de problema que te está atascando? Déjame un comentario e intentaré ayudarte. ¡Nos vemos en el siguiente!

Deja un comentario