La clase Activity Parte III

44
La clase Activity Parte III Wilfredo Cruz Yarlequé 1 http://wcruzy.pe/ Universidad Nacional de Piura [email protected] 18 de abril de 2014 1 Ingeniero Industrial Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 1 / 29

Transcript of La clase Activity Parte III

La clase ActivityParte III

Wilfredo Cruz Yarlequé 1

http://wcruzy.pe/

Universidad Nacional de Piura

[email protected]

18 de abril de 2014

1Ingeniero IndustrialWilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 1 / 29

1 La clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 2 / 29

La clase Activity

La Clase Activity

La clase ActivityUna Actividad es uno de los componentes de una aplicación,concretamente el encargado de ofrecer una pantalla con la que losusuarios pueden interactuar, con el único objetivo de hacer algo. Es porello que lleva asociada una interfaz de usuario.De hecho, una aplicación suele estar compuesta por varias actividadesque están vinculadas unas a otras de alguna forma. Generalmente, todaaplicación tiene una actividad considerada la actividad principal (main), lacual es la que se muestra al usuario cuando se abre la aplicación porprimera vez.

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 3 / 29

La clase Activity

La Clase Activity

La clase ActivityUna Actividad es uno de los componentes de una aplicación,concretamente el encargado de ofrecer una pantalla con la que losusuarios pueden interactuar, con el único objetivo de hacer algo. Es porello que lleva asociada una interfaz de usuario.De hecho, una aplicación suele estar compuesta por varias actividadesque están vinculadas unas a otras de alguna forma. Generalmente, todaaplicación tiene una actividad considerada la actividad principal (main), lacual es la que se muestra al usuario cuando se abre la aplicación porprimera vez.

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 3 / 29

La clase Activity

La Clase Activity

La clase ActivityComo desarrolladores, podremos lanzar nuevas actividades desde otrasactividades, de tal forma que la actividad lanzadora es pausada, pero elsistema la mantiene en memoria en una cola denominada back stack.Básicamente esta cola consiste en una cola tipo LIFO (Last In, First Out),o lo que es lo mismo, la última actividad que fue añadida, será la primeraen la cola. Así, cuando el usuario pulse el botón atrás (Back), el sistemanos quitará la actividad actual y nos mostrará justo la anterior en la cola,aunque este comportamiento por defecto puede ser modificado segúnnuestro interés.

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 4 / 29

La clase Activity

La Clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 5 / 29

La clase Activity

La Clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 6 / 29

La clase Activity

La clase Activity

Varias actividades pertenecerán a una tarea (task), la cual se definecomo un conjunto de actividades destinados a un trabajo determinado.A nivel de Manifest podemos gestionas las tareas, con la definición dealgunos atributos (taskAffinity, launchMode, allowTaskReparenting,clearTaskOnLaunch, alwaysRetainTaskState, finishOnTaskLaunch) yflags o banderas (FLAG_ACTIVITY_NEW_TASK,FLAG_ACTIVITY_CLEAR_TOP, FLAG_ACTIVITY_SINGLE_TOP).

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 7 / 29

La clase Activity

La clase Activity

Varias actividades pertenecerán a una tarea (task), la cual se definecomo un conjunto de actividades destinados a un trabajo determinado.A nivel de Manifest podemos gestionas las tareas, con la definición dealgunos atributos (taskAffinity, launchMode, allowTaskReparenting,clearTaskOnLaunch, alwaysRetainTaskState, finishOnTaskLaunch) yflags o banderas (FLAG_ACTIVITY_NEW_TASK,FLAG_ACTIVITY_CLEAR_TOP, FLAG_ACTIVITY_SINGLE_TOP).

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 7 / 29

La clase Activity

La clase ActivitySin embargo, el comportamiento por defecto se puede entender bastantebien en este ejemplo:

La Actividad A lanza BA para y guarda su estadoLe damos el botón HomeSe mantiene el estado de cada actividad en la tareaLe damos a BackLa actividad actual de la sale de la pila backstack y se destruye

La clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 8 / 29

La clase Activity

La clase ActivitySin embargo, el comportamiento por defecto se puede entender bastantebien en este ejemplo:

La Actividad A lanza BA para y guarda su estadoLe damos el botón HomeSe mantiene el estado de cada actividad en la tareaLe damos a BackLa actividad actual de la sale de la pila backstack y se destruye

La clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 8 / 29

La clase Activity

La clase ActivitySin embargo, el comportamiento por defecto se puede entender bastantebien en este ejemplo:

La Actividad A lanza BA para y guarda su estadoLe damos el botón HomeSe mantiene el estado de cada actividad en la tareaLe damos a BackLa actividad actual de la sale de la pila backstack y se destruye

La clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 8 / 29

La clase Activity

La clase ActivitySin embargo, el comportamiento por defecto se puede entender bastantebien en este ejemplo:

La Actividad A lanza BA para y guarda su estadoLe damos el botón HomeSe mantiene el estado de cada actividad en la tareaLe damos a BackLa actividad actual de la sale de la pila backstack y se destruye

La clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 8 / 29

La clase Activity

La clase ActivitySin embargo, el comportamiento por defecto se puede entender bastantebien en este ejemplo:

La Actividad A lanza BA para y guarda su estadoLe damos el botón HomeSe mantiene el estado de cada actividad en la tareaLe damos a BackLa actividad actual de la sale de la pila backstack y se destruye

La clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 8 / 29

La clase Activity

La clase ActivitySin embargo, el comportamiento por defecto se puede entender bastantebien en este ejemplo:

La Actividad A lanza BA para y guarda su estadoLe damos el botón HomeSe mantiene el estado de cada actividad en la tareaLe damos a BackLa actividad actual de la sale de la pila backstack y se destruye

La clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 8 / 29

La clase Activity

La clase Activity

Pero todo esto es el funcionamiento por defecto, pues podremosgestionarlo según nos interese, por ejemplo para compartir datos entrediferentes aplicaciones (un ejemplo perfecto son los Contactos).Una vez conocido como funciona Android, podemos pasar a definir loscomponentes de una aplicación. Éstos son los bloques básicos quepodemos construir. Hay 4 diferentes tipos de componentes:

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 9 / 29

La clase Activity

La clase Activity

Pero todo esto es el funcionamiento por defecto, pues podremosgestionarlo según nos interese, por ejemplo para compartir datos entrediferentes aplicaciones (un ejemplo perfecto son los Contactos).Una vez conocido como funciona Android, podemos pasar a definir loscomponentes de una aplicación. Éstos son los bloques básicos quepodemos construir. Hay 4 diferentes tipos de componentes:

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 9 / 29

La clase Activity

La clase Activity

Como connotación final sobre la pila backstack, mencionar que lasactividades pueden ser instanciadas más de una vez.Para crear una actividad, basta con que creemos una clase que heredede la clase Activity. Además de heredar de esta clase, deberemossobreescribir algunos métodos que pertenecen al ciclo de vida de laactividad. Este ciclo de vida consiste en los diferentes estados por losque puede pasar una actividad y los métodos que nos permiten cambiarde un estado a otro. De este modo, podemos distinguir los siguientesestados:

Resumed: En este estado, la actividad está en primer plano para el sistemaPaused: La actividad está aún visible, pero el foco está en otro componenteque está por encima de éstaStopped: La actividad aún está viva, pero está totalmente oculta

.

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 10 / 29

La clase Activity

La clase Activity

Como connotación final sobre la pila backstack, mencionar que lasactividades pueden ser instanciadas más de una vez.Para crear una actividad, basta con que creemos una clase que heredede la clase Activity. Además de heredar de esta clase, deberemossobreescribir algunos métodos que pertenecen al ciclo de vida de laactividad. Este ciclo de vida consiste en los diferentes estados por losque puede pasar una actividad y los métodos que nos permiten cambiarde un estado a otro. De este modo, podemos distinguir los siguientesestados:

Resumed: En este estado, la actividad está en primer plano para el sistemaPaused: La actividad está aún visible, pero el foco está en otro componenteque está por encima de éstaStopped: La actividad aún está viva, pero está totalmente oculta

.

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 10 / 29

La clase Activity

La clase Activity

Como connotación final sobre la pila backstack, mencionar que lasactividades pueden ser instanciadas más de una vez.Para crear una actividad, basta con que creemos una clase que heredede la clase Activity. Además de heredar de esta clase, deberemossobreescribir algunos métodos que pertenecen al ciclo de vida de laactividad. Este ciclo de vida consiste en los diferentes estados por losque puede pasar una actividad y los métodos que nos permiten cambiarde un estado a otro. De este modo, podemos distinguir los siguientesestados:

Resumed: En este estado, la actividad está en primer plano para el sistemaPaused: La actividad está aún visible, pero el foco está en otro componenteque está por encima de éstaStopped: La actividad aún está viva, pero está totalmente oculta

.

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 10 / 29

La clase Activity

La clase Activity

Como connotación final sobre la pila backstack, mencionar que lasactividades pueden ser instanciadas más de una vez.Para crear una actividad, basta con que creemos una clase que heredede la clase Activity. Además de heredar de esta clase, deberemossobreescribir algunos métodos que pertenecen al ciclo de vida de laactividad. Este ciclo de vida consiste en los diferentes estados por losque puede pasar una actividad y los métodos que nos permiten cambiarde un estado a otro. De este modo, podemos distinguir los siguientesestados:

Resumed: En este estado, la actividad está en primer plano para el sistemaPaused: La actividad está aún visible, pero el foco está en otro componenteque está por encima de éstaStopped: La actividad aún está viva, pero está totalmente oculta

.

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 10 / 29

La clase Activity

La clase Activity

Como connotación final sobre la pila backstack, mencionar que lasactividades pueden ser instanciadas más de una vez.Para crear una actividad, basta con que creemos una clase que heredede la clase Activity. Además de heredar de esta clase, deberemossobreescribir algunos métodos que pertenecen al ciclo de vida de laactividad. Este ciclo de vida consiste en los diferentes estados por losque puede pasar una actividad y los métodos que nos permiten cambiarde un estado a otro. De este modo, podemos distinguir los siguientesestados:

Resumed: En este estado, la actividad está en primer plano para el sistemaPaused: La actividad está aún visible, pero el foco está en otro componenteque está por encima de éstaStopped: La actividad aún está viva, pero está totalmente oculta

.

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 10 / 29

La clase Activity

La clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 11 / 29

La clase Activity

La clase Activity

De esta forma, podemos distinguir 3 procesos principales en la actividad:Tiempo de vida completo: Entre onCreate y onDestroyTiempo de vida visible: Entre onStart y onStopTiempo de vida en primer plano: Entre onResume y onPause

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 12 / 29

La clase Activity

La clase Activity

De esta forma, podemos distinguir 3 procesos principales en la actividad:Tiempo de vida completo: Entre onCreate y onDestroyTiempo de vida visible: Entre onStart y onStopTiempo de vida en primer plano: Entre onResume y onPause

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 12 / 29

La clase Activity

La clase Activity

De esta forma, podemos distinguir 3 procesos principales en la actividad:Tiempo de vida completo: Entre onCreate y onDestroyTiempo de vida visible: Entre onStart y onStopTiempo de vida en primer plano: Entre onResume y onPause

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 12 / 29

La clase Activity

La clase Activity

Tal como he comentado, en los cambios de un estado a otro, la actividad iráejecutando una serie de métodos. Estos métodos son los consideradospertenecientes al ciclo de vida de la misma. Para nosotros, los dos másimportantes son:

onCreate: El sistema llama este método al iniciar una actividad, y en éldeberemos iniciar todos los componentes de la actividad. Además, estemétodo deberá llamar siempre al método setContentView, encargado decargar la interfaz gráfica (un recurso layout, indicado a través de su ID)que la actividad utilizará.onPause: Es el primer método que se llama cuando el usuario estáabandonando la actividad. Es el método donde deberemos guardartodos los cambios que queramos que sean persistentes cuando elusuario abandone esta pantalla.

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 13 / 29

La clase Activity

La clase Activity

Tal como he comentado, en los cambios de un estado a otro, la actividad iráejecutando una serie de métodos. Estos métodos son los consideradospertenecientes al ciclo de vida de la misma. Para nosotros, los dos másimportantes son:

onCreate: El sistema llama este método al iniciar una actividad, y en éldeberemos iniciar todos los componentes de la actividad. Además, estemétodo deberá llamar siempre al método setContentView, encargado decargar la interfaz gráfica (un recurso layout, indicado a través de su ID)que la actividad utilizará.onPause: Es el primer método que se llama cuando el usuario estáabandonando la actividad. Es el método donde deberemos guardartodos los cambios que queramos que sean persistentes cuando elusuario abandone esta pantalla.

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 13 / 29

La clase Activity

La clase Activity

Pero cuando queremos optimizar nuestra aplicación, deberemossobreescribir también otros métodos del ciclo de vida, los cuales son:

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 14 / 29

La clase Activity

La clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 15 / 29

La clase Activity

La clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 16 / 29

La clase Activity

La clase Activity

Para terminar una actividad, basta con que llamemos al método finish.Como componente de una aplicación que es, la actividad deberá serregistrada en el archivo Manifest. Para ello, utilizaremos la etiqueta dentro dela etiqueta . Además, dentro de la actividad, podremos declarar todos los quequeramos, para identificar nuestra actividad y las acciones que puederealizar. Como ejemplo básico, la actividad considerada main, deberá llevar lacategoría LAUNCHER y la acción MAIN:

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 17 / 29

La clase Activity

La clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 18 / 29

La clase Activity

La clase Activity

Llegados este punto, sabemos definir una actividad, incluirla en el Manifest e,incluso, establecerla como la actividad principal. Pero ¿cómo lanzar unaactividad? Para ello tenemos dos posibles formas, pero siempre mediante eluso de Intent y el método startActivity:

Implícita: Sabemos qué actividad vamos a lanzar, y suele ser unaperteneciente a nuestra propia aplicación

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 19 / 29

La clase Activity

La clase Activity

Explícita: Sabemos la funcionalidad que queremos hacer, pero al noconocer qué actividades pueden hacerlo (de nuestra aplicación o deotras), delegamos en el sistema operativo. Éste, según sus categorías,acciones . . . buscará las posibilidades y nos la dará a elegir. ¿Cómodistingue el sistema entre todas sus actividades? Pues precisamentemediante el uso de los <intent-filter> que hemos mencionadoanteriormente.

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 20 / 29

La clase Activity

La clase Activity

Además, podemos necesitar lanzar una actividad pero esperar un resultadopara volver a nuestra actividad previa.Para ello, en lugar de startActivity utilizaremos startActivityForResult.De esta forma, podremos registrar los resultados que nosotros deseemos ynuestra actividad previa estará esperando a uno de estos resultados paralanzar alguna funcionalidad específica:

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 21 / 29

La clase Activity

La clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 22 / 29

La clase Activity

La clase Activity

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 23 / 29

La clase Activity

La clase Activity

Y ¿qué ocurre cuando una actividad es pausada pero aún no destruida? Paraello, podemos hacer uso del salvado de estado de la actividad, sobreescribiendo el método onSaveInstanceState, gracias al cual podremos salvartodos aquellos datos que queramos, y serán recuperados al restaurar laactividad:

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 24 / 29

La clase Activity

La clase Activity

Otras cosas que podemos hacer con la actividad es registrar cambios en lamisma, tales como cambios de orientación, del estado del teclado, deidioma.. Para ello haremos uso del método onConfigurationChanged:

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 25 / 29

La clase Activity

La clase Activity

Pero este método sólo se disparará ante los eventos que hayamos registradoen el Manifest, mediante el atributo android:configChanges. A continuaciónpuedes ver un ejemplo de registro de eventos de teclado y de orientación deldispositivo:

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 26 / 29

La clase Activity

La clase Activity

Por último, mencionar que podemos hacer uso de los Loaders, cuandoqueramos poder precargar de forma asíncrona (tanto en actividades como enfragmentos) información proveniente de algún ContentProvider.En el siguiente enlace hay un ejemplo completo para comprender mejor lasactividades y sus ciclos de vida.

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 27 / 29

La clase Activity

Referencias

El Android LibreAprende Android en 20 conceptos. Empezando a programar para Androidhttp://www.elandroidelibre.com/2014/02/

aprende-android-en-20-conceptos-empezando-a-programar-para-android.html

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 28 / 29

La clase Activity

FIN

Wilfredo Cruz Yarlequé http://wcruzy.pe/ (UNP) Aplicaciones Móviles 18 de abril de 2014 29 / 29