Capítulo 1. La anatomía de una aplicación Android
1. La anatomía de una aplicación Android Mientras que la mayor parte de este libro se centrará en aprender a desarrollar aplicaciones para Android usando C# y Xamarin.An y Xamarin.Android droid , nosotros comenzaremos con una discusión más general de Android. ¿Qué es Android? ¿Cómo Android facilita la tarea de crear grandes aplicaciones móviles? La anatomía de una aplicación Android ayudará a responder estas preguntas proporcionando proporcionando un nivel base de comprensión de los siguientes temas.
La plataforma Android.
Aplicaciones Android (construyendo bloques).
La plataforma Android. La plataforma Android ha sido una de las plataformas más exitosas desarrolladas en los últimos años y ofrece a los desarrolladores muchos servicios y funciones requeridas para crear valiosas aplicaciones móviles. El siguiente diagrama proporciona una vista de alto nivel de como la plataforma Android está organizada, y las secciones posteriores ofrecen una breve descripción de cada componente principal:
1 Desarrollo de aplicaciones móviles para Android con Xamarin Traducido por Hugo Daniel Reyes Rodríguez
Capítulo 1. La anatomía de una aplicación Android
Linux Android es un sistema operativo basado en Linux diseñado principalmente para dispositivos móviles tales como Smartphones y Tablets. Las últimas versiones de Android están basadas en la versión 3.x del kernel de Linux (versión 2.6 para versiones anteriores de Android 4.0).
Librerías nativas Android es liberado con un conjunto de librerías nativas escritas en C/C++, que ofrecen varios tipos de servicios. Esas librerías vienen mayormente de la comunidad de código abierto.
Tiempo de ejecución Android Las aplicaciones Android corren dentro de la Máquina Virtual Dalvik (Dalvik VM), que es similar a Java VM (máquina virtual de Java) pero ha sido optimizada para dispositivos con memoria y capacidad de procesamiento limitados. Las aplicaciones Android son inicialmente compiladas por el bytecode Java usando el compilador de Java, pero tienen un paso adicional de compilación que transforma el bytecode Java a bytecode Dalvik, adecuándolo para correr en dentro de Dalvik VM.
Dalvik es liberado con las bibliotecas del núcleo Android. Esas librerías no están alineadas con una plataforma específica de Java (JSE, JEE o JME) pero más bien actúan como una plataforma hibrida más directamente alineada con JME, menos la interfaz del usuario centrada en los componentes AWT y Swing. El Android Application Framework (AAF) proporciona medios alternativos de creación de interfaces de usuario.
Application Framework Application Framework es la parte de la plataforma Android, más familiar para los desarrolladores. Este es liberado como un conjunto de librerías Java y te permite construir interfaces de usuario, interactuar con las capacidades del dispositivo tales como la cámara o los servicios de ubicación, cargar y trabajar con varios tipos de recursos de la aplicación, y realizar muchas más tareas útiles.
2 Desarrollo de aplicaciones móviles para Android con Xamarin Traducido por Hugo Daniel Reyes Rodríguez
Capítulo 1. La anatomía de una aplicación Android
Aplicaciones En la parte superior de la pila se encuentra la aplicación humilde, el componente que en realidad libera valor al usuario. Android viene con un conjunto de aplicaciones que ofrecen funcionalidades básicas tales como administración de contactos, uso del teléfono, comprobación del correo electrónico, y navegación de la web. La clave del éxito de Android es la gran cantidad de aplicaciones de terceros que pueden ser instaladas, las cuales permiten a los usuarios hacer cosas tales como transmisión en vivo de eventos deportivos, editar una película capturada con el teléfono, interactuar con amigos a través de su sitio favorito de medios sociales, y mucho más.
Los paquetes Android (.apk) Las aplicaciones son liberadas para su instalación en un formato de paquete Android. Un paquete Android es creado como el resultado de compilar una aplicación Android y un archivo de almacenamiento con una extensión .apk . Un paquete Android contiene todo el código y los archivos de soporte requeridos para correr una sola aplicación incluyendo los siguientes:
Ejecutables Dalvik (*. archivos dex).
Recursos.
Librerías nativas.
El manifiesto de la aplicación.
Los paquetes Android pueden ser instalados directamente vía correo electrónico, URLs o tarjetas de memoria. También pueden ser instalados indirectamente a través de tiendas de aplicaciones tales como Google Play.
El manifiesto de la aplicación Todas las aplicaciones Android tienen un archivo manifiesto ( AndroidManifest.xml ) que le dice a la plataforma Android todas las cosas que necesita saber para ejecutar correctamente la aplicación, incluyendo lo siguiente:
Nivel API mínimo requerido por la aplicación.
Características de Software/Hardware usadas o requeridas por la aplicación.
Permisos requeridos por la aplicación.
La pantalla inicial (Android activity) para empezar cuando la aplicación es puesta en marcha.
Librerías, aparte de AFF requeridas por la aplicación.
Etcétera. 3
Desarrollo de aplicaciones móviles para Android con Xamarin Traducido por Hugo Daniel Reyes Rodríguez
Capítulo 1. La anatomía de una aplicación Android
Versiones de Android Identificar la versión de la plataforma Android puede ser algo confuso, hay un número de versión, nivel de API, y sobre nombre, y estos son usados algunas veces indistintamente. El número de versión representa una liberación de la plataforma. Algunas veces, una nueva liberación es creada para entregar nuevas capacidades, mientras que algunas veces son creadas para arreglar bugs. El nivel API representa un conjunto de capacidades. A medida que aumenta el nivel API, nuevas capacidades son entregadas para el desarrollador. La siguiente tabla lista las versiones de la plataforma en orden cronológico inverso:
Las aplicaciones Android Ahora, vamos a pasar algún tiempo discutiendo las aplicaciones Android – esas cosas que escribimos para proporcionar valor al usuario. Las aplicaciones Android se componen de varios tipos de clases y recursos. Las siguientes secciones describen los diferentes tipos de clases o bloques de construcción por los cuales una aplicación puede ser compuesta. 4 Desarrollo de aplicaciones móviles para Android con Xamarin Traducido por Hugo Daniel Reyes Rodríguez
Capítulo 1. La anatomía de una aplicación Android
Actividades Una de las partes más fundamentales de una aplicación Android es una actividad (activity). Una actividad proporciona una sola función que un usuario puede realizar con una aplicación tal como una lista de contactos, ingresar a nuevo contacto, y ver ubicaciones en un mapa. Una sola aplicación es conformada con muchas actividades. Un usuario interactúa con una actividad a través de una o más vistas, que son descritas después en este capítulo. Si está familiarizado con el patrón modelo-vista-controlador, se dará cuenta que las actividades cumplen el papel de controlador.
El ciclo de vida de una actividad Las actividades tienen un bien definido ciclo de vida que puede ser descrito en términos de estados, transiciones y eventos. El siguiente diagrama proporciona una vista grafica del ciclo de vida de una actividad:
Estados de una actividad Los estados representados en el diagrama anterior se derivan, esto significa que no hay una variable “Estado” en una actividad que identifica explícitamente uno de esos estados, pero el estado es implícito y útil para la discusión. La siguiente tabla describe el comportamiento de una actividad basada en su estado: Estado
Descripción
Running
La actividad ha sido creada e inicializada, y esta visible y disponible para la interacción del usuario. 5
Desarrollo de aplicaciones móviles para Android con Xamarin Traducido por Hugo Daniel Reyes Rodríguez
Capítulo 1. La anatomía de una aplicación Android
Paused Stopped
La vista de la actividad está siendo parcialmente bloqueada por otra actividad. La actividad ya no es visible para el usuario. La actividad no ha sido destruida, y el estado se mantiene en el fondo y no se permite el procesamiento.
Eventos de una actividad Durante la transición entre estados, una serie de eventos son llamados en la actividad. Esos eventos proporcionan a los desarrolladores una plataforma para varios ti pos de procesamiento. Evento onCreate
onStart
onResume
Llamado Cuando una actividad es creada, generalmente de una elección del usuario para iniciar la aplicación. Después de onCreate u onRestart, y justo antes que una actividad se convierte en visible para el usuario. Antes que una actividad se encuentre lista para iniciar la interacción con el usuario.
Inicializar los widgets para la visualización. Inicializar animaciones o videos. Empezar a escuchar para las actualizaciones de GPS. Comprometer actualizaciones no guardadas. Pausar animaciones o videos. Dejar de escuchar actualizaciones de GPS. Liberar recursos.
Asignar recursos.
onPause
Cuando una vista de actividad se ha convertido en parcialmente bloqueada y no es el foco de entrada.
onStop onRestart
onDestroy
Cuando una vista de actividad ya no es visible para el usuario. Una actividad se coloca de nuevo en primer plano, generalmente porque el usuario ha seleccionado el botón de retroceso. Antes la actividad es destruida.
Procesamiento típico Crear vistas. Inicializar variables. Asignar recursos de vida larga. Asignar recursos.
Limpia los recursos que pueden haber sido asignado en onCreate.
Algunas cosas que no son obvias para los desarrolladores nuevos en Android es la forma de ofertas del Framework con los cambios de orientación del dispositivo. Por defecto, cuando la orientación de un dispositivo es cambiada de vertical a horizontal, Android destruye y recrea actividades existentes para ayudar a garantizar que se utiliza la disposición más adecuada. A menos que se planee para este comportamiento, esto puede ser perjudicial 6 Desarrollo de aplicaciones móviles para Android con Xamarin Traducido por Hugo Daniel Reyes Rodríguez
Capítulo 1. La anatomía de una aplicación Android
para el procesamiento. Si es necesario es comportamiento puede ser anulado y las actividades pueden ser retenidas. Vamos a discutir las consideraciones especiales en tratar con estados y otras preocupaciones relacionadas al procesamiento para este tópico en el capítulo 7, haciendo ubicación consciente POIApp.
Servicios Los servicios son componentes que se ejecutan en segundo plano para realizar operaciones de ejecuciones largas sin interfaz de usuario directa. Los servicios pueden cargar datos en memoria cache, reproducir música, o realizar algunos otros tipos de procesamiento, mientras un usuario interactúa con otras actividades ininterrumpidamente.
Proveedores de contenido Los proveedores de contenido gestionan acceso a un repositorio central de datos como los contactos. Un proveedor de contenido es una parte de una aplicación, el cual proporciona una interfaz de usuario para gestionar esos datos. Una interfaz estándar es también proporcionada, mientras permite a otras aplicaciones acceder a esos repositorios.
Receptores Broadcast Los receptores de broadcast son componentes que realizan algún tipo de procesamiento en respuesta al broadcast del todo el sistema. El broadcast es generalmente iniciado por el sistema para eventos tales como batería baja, tomar una fotografía, o encender el Bluetooth. Las aplicaciones pueden también elegir emitir broadcast ; un proveedor de contenido puede enviar un broadcast con datos, como un contacto que ha sido actualizado. Mientras los broadcast no tienen una interfaz de usuario, pueden indirectamente causar una actualización en un estado.
Views y ViewGroups Todo lo que ves en una aplicación Android es una vista; botones, etiquetas, cajas de texto, y radio botones todos son ejemplos de vistas. Las vistas son organizadas en una jerarquía usando varios tipos de ViewGroups. Un ViewGroup es un tipo especial de vista que es usado para diseñar (layout) otras vistas en la pantalla.
Declarativa vs. Creación vista programática Las Views y ViewGroups pueden ser creados utilizando dos métodos diferentes, programáticamente o declarativamente. Cuando se usa un enfoque programático, un desarrollador hace llamadas a la API para crear y posicionar cada vista individual en la UI (interfaz de usuario). Cuando se usa un enfoque declarativo, un desarrollador crea archivos 7 Desarrollo de aplicaciones móviles para Android con Xamarin Traducido por Hugo Daniel Reyes Rodríguez
Capítulo 1. La anatomía de una aplicación Android
de diseño XML que especifica cómo deben disponerse las vistas. El método declarativo disfruta de varias ventajas establecidas de la siguiente manera:
Proporciona una mejor separación del diseño visual de la aplicación a la lógica de procesamiento. Permite que muchos diseños sean creados para soportar múltiples dispositivos o configuraciones de dispositivo con un solo código base. Herramientas de desarrollo, tal como Android Studio y el complemento Android para Eclipse, te permiten ver la interfaz de usuario tal como la construyes, sin necesidad de compilar y ejecutar tu aplicación después de cada cambio.
Mientras prefiero el método declarativo para la mayoría de las cosas, he encontrado que, en la práctica, a menudo se requiere de una combinación de los métodos programáticos y declarativos.
Widgets de interfaz de usuario Android proporciona un comprensivo conjunto de widgets de interfaz de usuario, que pueden ser utilizadas para construir una experiencia de usuario rica. Todas estos widgets son subtipos de vistas y pueden ser organizados dentro de sofisticados diseños usando varios tipos de ViewGroups. Todos los widgets de interfaz de usuario pueden ser encontrados en el paquete android.widget dentro del Application Framework .
Diseños comunes El Application Framework tiene un número de clases de ViewGroup, cada uno proporciona una única y útil manera de organizar el contenido.
8 Desarrollo de aplicaciones móviles para Android con Xamarin Traducido por Hugo Daniel Reyes Rodríguez
Capítulo 1. La anatomía de una aplicación Android
El anterior diagrama representa algunos de los diseños más comunes, cada uno de los cuales puede ser utilizado para necesidades específicas. Diseño
Descripción
Escenario
Linear Layout
Organiza a sus hijos en una Se usa cuando una posición de única fila horizontal o vertical y widget tiene flujo horizontalmente crea una barra de o verticalmente. desplazamiento cuando es necesario.
Relative layout
Organiza los objetos Se utiliza cuando las posiciones del secundarios con respecto a widget pueden describirse mejor otro o al padre. con relación a otro widget (a la izquierda de) o al área de cobertura de los padres (lado derecho, centrado).
Table layout
Organiza a sus hijos dentro de renglones y columnas.
Se utiliza cuando las posiciones de widget encajarían naturalmente en renglones y columnas. Es mejor cuando múltiples columnas de entrada y etiquetas son necesarias.
Para escenarios complejos de diseño, Android permite diseños anidados. Los diseños profundamente anidados pueden afectar el rendimiento y se deben evitar si es posible.
Diseños Adapter Para diseños que son manejados por una fuente de datos dinámicos, el Application Framework tiene un conjunto de clases derivadas de AdapterView.
9 Desarrollo de aplicaciones móviles para Android con Xamarin Traducido por Hugo Daniel Reyes Rodríguez
Capítulo 1. La anatomía de una aplicación Android
El diagrama anterior representa dos de los más comunes diseños Adapter.
List View: Organiza el contenido de la fuente de datos dentro de una sola lista columna de desplazamiento. Grid View: Organiza el contenido de la fuente de datos dentro de un grid de columnas y renglones.
Archivos de diseño XML Para crear una UI usando un método declarativo, Android proporciona un vocabulario XML con etiquetas que definen varios tipos de elementos que pueden componer una vista. El concepto detrás de un archivo de diseño XML es muy similar a la forma de etiquetas HTML que se usan para definir páginas web o etiquetas XAML de Microsoft usadas para definir interfaces de usuario WPF (Windows Presentation Foundation). El siguiente ejemplo muestra una simple vista usando un Linear layout y contiene un campo de entrada de búsqueda y un botón de búsqueda.
Nombres de elementos y atributos Se ha tomado cuidado para alinear los nombres de elementos y atributos en el vocabulario XML con nombres de clases y métodos del Application Framework. En el ejemplo anterior, los nombres de los elementos LinearLayout, TextView y Button corresponden a nombres de clases del Application Framework. Del mismo modo, el 10 Desarrollo de aplicaciones móviles para Android con Xamarin Traducido por Hugo Daniel Reyes Rodríguez
Capítulo 1. La anatomía de una aplicación Android
elemento Button, el atributo android:text corresponden a el setText()setter en la clase Button.
IDs Cada vista puede tener un ID entero único asociado con él y puede ser usado para referenciar la vista dentro de un código de la aplicación. En el archivo XML, el ID es especificado como un nombre de texto amigable. Por ejemplo, considera la siguiente línea de código:
En este ejemplo, el operador @ indica al analizador que debe tratar al resto de la cadena como como un recurso de identificación ID; el símbolo + indica al analizador que se trata de un nuevo recurso de nombre que se debe agregar al archivo de recurso R.Java. El archivo de recurso define constantes enteras que pueden ser usadas como recursos de referencia.
Usando diseños XML de actividades Los diseños XML pueden ser cargados fácilmente por una aplicación en tiempo de ejecución. Esta tarea se realiza generalmente dentro del método onCreate() de una actividad usando el método setContentView(). Por ejemplo, considera la siguiente línea de código:
Intentos Los intentos son mensajes que pueden ser enviados por varios tipos de componentes en una aplicación Android en orden como respuesta de algún tipo de acción que es realizada. Los intentos se pueden utilizar para llevar a cabo cualquiera de las siguientes:
Iniciar una actividad con la opción de recibir un resultado.
Iniciar o detener un servicio.
Notificar el componente de condiciones como la batería baja o cambio de zona horaria. Solicitar una acción desde otra aplicación, tal como la solicitud de la aplicación mapa para mostrar una ubicación o solicitar que la aplicación de la cámara tome una fotografía y la guarde.
11 Desarrollo de aplicaciones móviles para Android con Xamarin Traducido por Hugo Daniel Reyes Rodríguez
Capítulo 1. La anatomía de una aplicación Android
Recursos La creación de una aplicación Android involucra más que simplemente escribir código. Una gran aplicación móvil requiere cosas como imágenes, sonidos, animaciones, menús y estilos, solo por nombrar algunas. El Framework Application proporciona APIs que pueden ser usadas para cargar y utilizar los varios tipos de recursos en tus aplicaciones Android. Descargando el código de ejemplo
Puedes descargar los archivos de código de los ejemplos para todos los libros Packt que has adquirido desde tu cuenta en http://packtpub.com . Si adquiriste este libro en otras partes, puedes visitar http://packtpub.com/support y registrarte para obtener los archivos enviados directamente a usted por correo electrónico.
El archivo R.Java Los recursos son generalmente referenciados desde dentro de una aplicación usando una constante entera que es asignada automáticamente cuando el recurso es agregado al proyecto y compilado. Estas constantes se colocan en un archivo fuente de Java llamado R.Java. El siguiente ejemplo muestra la clase R.Java de una aplicación simple:
12 Desarrollo de aplicaciones móviles para Android con Xamarin Traducido por Hugo Daniel Reyes Rodríguez
Capítulo 1. La anatomía de una aplicación Android
Resumen En este capítulo, hemos tratado de ofrecer una concisa y adecuada demostración de la plataforma Android y de los bloques de construcción de la aplicación. En el siguiente capítulo, vamos a centrar nuestra atención en Xamarin.Android y las facilidades que ofrece para permitir el desarrollo Android con .Net y C#.
13 Desarrollo de aplicaciones móviles para Android con Xamarin Traducido por Hugo Daniel Reyes Rodríguez