Ciclo+de+Vida+en+Android

NUEVOS PARADIGMAS DE INTERACCIÓN = = = = PRÁCTICA 1 - INTERACCIÓN CON ANDROID = = = = = = CICLO DE VIDA DE UNA ACTIVIDAD ANDROID ESTRUCTURA DE CARPETAS DE UNA PROYECTO ANDROID = =

Pablo Fernández  Francisco Navarro   Álvaro Muñoz

CICLO DE VIDA DE UNA ACTIVIDAD ANDROID



Fuente: [|__http://www.skill-guru.com/blog/wp-content/uploads/2011/01/Android_Logcat-Activity-Starts.jpg__]

Una actividad en Android puede estar en uno de estos cuatro estados:
 * 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, se recomienda 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 Android, sale de la pila de actividades.

Cada vez que una actividad cambia de estado se van a producir eventos que podrán ser capturados por ciertos métodos de la actividad. Los métodos que capturan estos eventos son:
 * onCreate(Bundle): se llama en la creación de la actividad. 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. Puede recibir información de estado de instancia (en una instancia de la clase Bundle), por si se reanuda desde una actividad que ha sido destruida y vuelta a crear.
 * onStart: nos indica que la actividad está a punto de ser mostrada al usuario.
 * 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.
 * onPause: indica que la actividad está a punto de ser lanzada a segundo plano, normalmente porque otra aplicación es lanzada. Es el lugar adecuado para detener animaciones, música o almacenar los datos que estaban en edición.
 * onStop: la actividad ya no va a ser visible para el usuario. Ojo si hay muy poca memoria, es posible que la actividad se destruya sin llamar a este método.
 * onRestart: indica que la actividad va a volver a ser representada después de haber pasado por onStop.
 * onDestroy: se llama antes de que la actividad sea totalmente destruida. Por ejemplo, cuando el usuario pulsa el botón 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.

Fuente: [|__http://www.androidcurso.com/index.php/tutoriales-android/37-unidad-6-multimedia-y-ciclo-de-vida/158-ciclo-de-vida-de-una-aplicacion__]

ESTRUCTURA DE CARPETAS DE UNA PROYECTO ANDROID: IDIOMAS Y RESOLUCIONES Dentro de cualquier proyecto Android, además de la de código fuente (src) y la de código compilada (gen), encontraremos una serie de carpetas extras. Destacamos entre ellas:

a) Assets: Dicha carpeta esta orientada a guardar todos los recursos de la aplicación. Se entiende por recurso: imágenes, sonidos, música, video (...), que nuestra aplicación necesite. Es altamente recomendado crear una subjerarquia de carpetas para tener más organizado nuestros recursos.

b) Res: Dentro de esa, a su vez se encuentran dos carpetas clave de cara a lo que llamariamos “un buen desarrollo”. existente en nuestra aplicación. Observaciones clave de cara a “un buen desarrollo”:  Al igual que con Layout, podemos definir una carpeta “values-x” (donde x es  el código del idioma) por cada idioma. Por defecto (en el caso de no encontrar una carpeta values para el idioma del teléfono) cogerá “values”.
 * 1) __Drawable-(...)__: Existen varias carpetas (segun la ddp). Aquíi se han de colocar aquellos recursos gráficos que se vayan a pintar en la aplicación como parte de la interfaz (por cuestiones de eficiencia).
 * 2) __Layout__: En esta carpeta se guardan los XML asociados al diseño de cada Activity
 * 1)  Si deseamos que nuestra aplicación sea multilenguaje debemos crear una una carpeta llamada “layout-x” donde x es el código del idioma. Dichos códigos podemos encontrarlos en: [|__http://es.wikipedia.org/wiki/ISO_639-1__] La aplicación escogerá entre una carpeta layout u otra en función del idioma en el que esté configurado el dispositivo. De no encontrar la carpeta layout de un idioma específico, cogerá por defecto “layout”.
 * 2) Si deseamos que nuestra aplicación controle la orientación del dispositivo (landscape y portrait). debemos crear una carpeta “layout-land” para cuando tumbemos el dispositivo y especificar ahí el diseño para cuando esto ocurra. Si deseamos combinar, por ejemplo, un diseño landscape y en español la carpeta layout debería recibir el nombre “layout-landscape-es”.
 * 3) __Values__: Dentro de esta carpeta encontraremos tres .xml: dimens.xml (dimensiones, posicion, (...) de los elementos), strings.xml (textos de nuestra aplicación) y styles.xml (tema de la aplicación).

c) Android Manifest: Sin duda el fichero más importante. En el se establecen cuestiones relativas a la aplicación tales como: versión de Android mínima, objetivo, permisos, sensores necesarios (...). Este archivo, además de ser indicativo para el usuario, restringirá las búsquedas de nuestra aplicación en el market. Puesto que si declaramos:



estaríamos indicando que necesitaremos escribir en la tarjeta del dispositivo. A partir de ese momento nuestra aplicación no aparecerá en el market a dispositivos que no tengan capacidad para una tarjeta externa y en el momento de instalación, al usuario se le indicará que la aplicación hará uso de ella.

UN EJEMPLO PRÁCTICO En el enlace [|__https://github.com/alvaromm/npi/tree/master/P1_Android__] puede verse una aplicación que nos muestra los estados por los que pasa cada actividad en su ciclo de vida. Dicha aplicación ha sido extraída de los ejemplos de la API de Android, concretamente en:

[|__http://developer.android.com/training/basics/activity-lifecycle/index.html__] En esta primera imagen podemos observar como se crea la actividad inicial de la aplicación y pasa por los métodos onCreate, onStart y onResume.





Cuando iniciamos la actividad B, la actividad A pasa a un segundo plano y su estado pasa a ser Paused. Se crea la actividad B donde pasa por los estados onCreate, onStart y onResume.



En este ejemplo pasamos de la actividad B a la actividad A a la actividad C, pero para iniciar la actividad C android destruye la actividad B, esto es debido a que la actividad B esta “tapada” por completo y pasa al estado onStop donde android decide liberar la memoria de la actividad y pasa al estado onDestroy. La actividad A pasa a un segunda plano y se sitúa en el estado pausado.