Android. Segunda Parte. Ciclo de vida de las activities

1.1. Presentación

Esta ejercicio es una introducción al desarrollo de aplicaciones Android.

1.2. Competencias

Se trabajarán las siguientes competencias:

  • Capacidad para programar aplicaciones para dispositivos Android.
  • Capacidad para integrar las APIs y servicios de Google, como por ejemplo el servicio de mapas.

1.3. Objetivos

Los objetivos son que el estudiante aprenda a:

  • Conocer el ciclo de vida de las activities de una aplicación.
  • Crear y codificar las activities de una aplicación.
  • Enviar datos entre activities de una aplicación.
  • Crear y codificar archivos XML que definen la interfaz gráfica de la aplicación.
  • Integrar los servicios y las funcionalidades de los mapas que ofrece Google a través de Google Maps API v2.
  • Utilizar el GPS para posicionar el dispositivo móvil.
  • Utilizar persistencia de datos mediante los SharedPreferences.

1.4 Ejercicios

GitHub

El objetivo de este ejercicio es entender el ciclo de vida de las activities. Se ha creado un proyecto en GitHub (plataforma de desarrollo colaborativo de software para almacenar proyectos utilizando el sistema de control de versiones Git) que os podréis descargar siguiendo los siguientes pasos:

  • Abrir Android Studio.
  • Ir a la pestaña
  • VCS > Checkout from version control > GitHub

    Ejemplo importar proyecto GitHub con Android Studio
    1.Ejemplo importar proyecto GitHub con Android Studio.

  • O si no tenéis ningún proyecto abierto, directamente desde el Quick Start elegid la opción
  • Checkout from version control > GitHub

    Ejemplo importar proyecto GitHub con Android Studio.
    2. Ejemplo importar proyecto GitHub con Android Studio.

  • Una vez seleccionado, en la opción Vcs Repository URL escribid la siguiente URL y elegid la ubicación de destino.

Una vez abierto el proyecto, ejecútalo en el emulador/dispositivo móvil y responde las siguientes preguntas:

    Explica cuáles son los diferentes estados de una activity y cuando se produce cada uno de estos estados (ver apartado 2.1 de la wiki).

    Primero de todo, en mi caso he tenido que realizar una instalación del Git para poder exportar el proyecto. Para realizar esta tarea instale del siguiente enlace el programa git.exe. Una vez finalizada esta instalación añado la ruta de la aplicación GIT como se muestra en la figura [3] .

    Ruta Git
    3. Ruta Git

    Si aplicamos el test, podremos observar que, si hemos realizado correctamente la instalación aparece el mensaje de la figura [4]

    Exito instalación Git
    4. Exito instalación Git

    Una vez este problema ha sido solucionado, descargo la aplicación y podemos explicar cual es el estado de una Activity.

    Primero de todo, para analizar los estados que posee una Activity debemos conoces su definición. Una aplicación en Android va a estar formada por un conjunto de elementos básicos de interacción con el usuario, conocidos como activities. Además, las activities estan compuestas por los siguientes métodos:

    • onCreate(): se llama cuando se crea la activity. Se utiliza para realizar todo tipo de inicializaciones, como la creación de la interfaz de usuario o la inicialización de estructuras de datos.
    • onResume(): Se llama cuando la actividad va a comenzar a interactuar con el usuario. Es un buen lugar para lanzar las animaciones y la música.
    • onStart(): se llama cuando la activity es visible para el usuario. Indica que la actividad va a volver a ser representada después de haber pasado por onStop().
    • onPause(): se llama cuando se pausa la activity. Luego se puede volver a llamar.Es el lugar adecuado para detener animaciones, música o almacenar los datos que estaban en edición.
    • onStop(): se llama cuando la activity deja de ser visible para el usuario. Ojo si hay muy poca memoria, es posible que la actividad se destruya sin llamar a este método.
    • onDestroy(): se llama justo antes de que la activity sea destruida por el sistema. Por ejemplo, cuando el usuario pulsa el botón de volver o cuando se llama al método finish(). Ojo si hay muy poca memoria, es posible que la actividad se destruya sin llamar a este método.
    • onRestart(): se llama cuando la activity se ha detenido y se vuelve a reiniciar.

    Los diferentes tipos de estados de una Activity son los siguientes:

    • Activa (Running): La actividad está encima de la pila, lo que quiere decir que es visible y tiene el foco.
    • Visible (Paused): La actividad es visible pero no tiene el foco. Se alcanza este estado cuando pasa a activa otra actividad con alguna parte transparente o que no ocupa toda la pantalla. Cuando una actividad está tapada por completo, pasa a estar parada.
    • Parada (Stopped): Cuando la actividad no es visible. El programador debe guardar el estado de la interfaz de usuario, preferencias, etc.
    • Destruida (Destroyed): Cuando la actividad termina al invocarse el método finish(), o es matada por el sistema.

    Cada vez que una actividad cambia de estado se van a generar eventos que podrán ser capturados por ciertos métodos de la actividad. A continuación se muestra un esquema que ilustra los métodos que capturan estos eventos.

    Ciclo de vida de una actividad
    5. Ciclo de vida de una actividad

    Mediante la ayuda de Logs, identifica por qué estados pasa cada activity en los siguientes casos:
    • Cuando la aplicación se abre por primera vez.
      • onCreate
      • onStart
      • onResume

      Procesos mostrados por el log
      6. Procesos mostrados por el log

    • Cuando pasamos de la activity A a la B.
      • onPause ActivityA
      • onCreate ActivityB
      • onStart ActivityB
      • onResume ActivityB
      • onStop ActivityA

      Procesos mostrados por el log
      7.Procesos mostrados por el log

    • Cuando volvemos atrás utilizando el botón back (B A).
      • onPause ActivityB
      • onRestart ActivityA
      • onStart ActivityA
      • onResume ActivityA
      • onStop ActivityB
      • onDestroy ActivityB

      Procesos mostrados por el log
      8. Procesos mostrados por el log

    • Cuando se abre el diálogo estando a cualquier activity y después lo cerramos.
      • onPause ActivityA
      • onResume ActivityA

      Procesos mostrados por el log
      9. Procesos mostrados por el log

    ¿Qué tendríamos que modificar para hacer que la activity C sea la que se ejecuta por primera vez cuando abrimos la aplicación.

    El cambio que aparece en la figura [10] marcada en el circulo color verde. Indicamos en el archivo Manifest.xml que la Activity C será la primera en ser lanzada y la Activity A pasa a ser únicamente una actividad más.

    Captura del documento Manifest.xml
    10. Captura del documento Manifest.xml

    ¿Para qué sirven los intents? ¿Qué tipos hay? ¿Qué tipo se utiliza en este ejercicio para cambiar de pantallas?

    Los intents ofrecen un servicio de paso de mensajes que permite interconectar componentes de la misma o de distintas aplicaciones. Normalmente, se utilizan para invocar una nueva actividad o para enviar eventos a múltiples actividades (llamados broadcast intents). Los intents son gestionados por los receptores de eventos o broadcast receivers, que pueden escuchar a cualquier intent.

    Sus atributos son los siguientes:

    • El nombre del componente que queremos avisar. Por ejemplo, la aplicación de correo electrónico.
    • La acción que se quiere lanzar. Por ejemplo, editar, llamar, sincronizar, información de batería baja, etc.
    • Los datos sobre la acción. Por ejemplo, escribir un nuevo correo.
    • La información extra. La dirección de correo del destinatario y el título.
    Existen dos tipos de intenciones:
    • Intenciones explícitas: se indica exactamente el componente a lanzar. Su utilización típica es la de ir ejecutando los diferentes componentes internos de una aplicación.
    • Intenciones implícitas: Es la plataforma la que determina, mediante el proceso de resolución de intenciones, qué componente es el más apropiado para manejar
    • el intent.
    Respecto a como se utilizan los intents podemos definir los siguientes casos
    • Lanzar una actividad (startActivity() y startActivityForResult())
    • Lanzar un servicio (startService())
    • Lanzar un anuncio de tipo broadcast (sendBroadcast())
    • Conectarnos con un servicio (bindService())
    En nuestro programa utilizamos el intent para lanzar una Actividad.

Bibliografía