Modulo V. Aplicaciones móviles con Android.

Anuncio
Diego Altamirano Cabrera.
Modulo V.
Aplicaciones móviles con Android.
Introducción.
Android es un sistema operativo libre basado en Linux y orientado a dispositivos móviles, como
teléfonos inteligentes y tablets. Debido a las características del proyecto y gracias al software libre,
el sistema operativo Android ha ido comiendo terreno a otros sistemas operativos para móviles y
se ha situado en el sistema operativo más usado por usuarios y desarrolladores. Debido a su gran
demanda es importante formar a profesionales en el sector de la movilidad y concretamente en el
desarrollo de aplicaciones móviles de última generación. Por ello, el objetivo de este curso es
formar a personas aptas en el desarrollo de aplicaciones móviles en la plataforma Android. Que
sean no solo capaces de desarrollar sistemas en esta plataforma sino también de poder
monetizarlos mediante la tienda de aplicaciones Google Play.
1.1 Android.
Android es un sistema operativo móvil basado en Linux, que junto con aplicaciones middleware
está enfocado para ser utilizado en dispositivos móviles como teléfonos inteligentes, tabletas,
Google TV y otros dispositivos. Es desarrollado por la Open Handset Alliance, la cual es liderada
por Google. Este sistema por lo general maneja aplicaciones como Market (Marketing) o su
actualización, PlayStore.
Fue desarrollado inicialmente por Android Inc., una firma comprada por Google en 2005. Es el
principal producto de la Open Handset Alliance, un conglomerado de fabricantes y desarrolladores
de hardware, software y operadores de servicio. Las unidades vendidas de teléfonos inteligentes
con Android se ubican en el primer puesto en los Estados Unidos, en el segundo y tercer trimestres
de 2010, con una cuota de mercado de 43,6% en el tercer trimestre. A nivel mundial alcanzó una
cuota de mercado del 50,9% durante el cuarto trimestre de 2011, más del doble que el segundo
sistema operativo (iOS de iPhone) con más cuota.
Tiene una gran comunidad de desarrolladores escribiendo aplicaciones para extender la
funcionalidad de los dispositivos. A la fecha, se han sobrepasado las 400.000 aplicaciones (de las
cuales, dos tercios son gratuitas) disponibles para la tienda de aplicaciones oficial de Android:
Google Play, sin tener en cuenta aplicaciones de otras tiendas no oficiales para Android, como
pueden ser la App Store de Amazon o la tienda de aplicaciones Samsung Apps de Samsung. Google
Play es la tienda de aplicaciones en línea administrada por Google, aunque existe la posibilidad de
Diego Altamirano Cabrera.
obtener software externamente. Los programas están escritos en el lenguaje de programación
Java. No obstante, no es un sistema operativo libre de malware, aunque la mayoría de ello es
descargado de sitios de terceros.
El anuncio del sistema Android se realizó el 5 de noviembre de 2007 junto con la creación de la
Open Handset Alliance, un consorcio de 78 compañías de hardware, software y
telecomunicaciones dedicadas al desarrollo de estándares abiertos para dispositivos móviles.
Google liberó la mayoría del código de Android bajo la licencia Apache, una licencia libre y de
código abierto.
La estructura del sistema operativo Android se compone de aplicaciones que se ejecutan en un
framework Java de aplicaciones orientadas a objetos sobre el núcleo de las bibliotecas de Java en
una máquina virtual Dalvik con compilación en tiempo de ejecución. Las bibliotecas escritas en
lenguaje C incluyen un administrador de interfaz gráfica (surface manager), un framework
OpenCore, una base de datos relacional SQLite, una Interfaz de programación de API gráfica
OpenGL ES 2.0 3D, un motor de renderizado WebKit, un motor gráfico SGL, SSL y una biblioteca
estándar de C Bionic. El sistema operativo está compuesto por 12 millones de líneas de código,
incluyendo 3 millones de líneas de XML, 2,8 millones de líneas de lenguaje C, 2,1 millones de líneas
de Java y 1,75 millones de líneas de C++.
Diego Altamirano Cabrera.
1.2 Arquitectura
Diagrama de arquitectura de Android.
Los componentes principales del sistema operativo de Android (cada sección se describe en
detalle):
Aplicaciones: las aplicaciones base incluyen un cliente de correo electrónico, programa de SMS,
calendario, mapas, navegador, contactos y otros. Todas las aplicaciones están escritas en lenguaje
de programación Java.
Marco de trabajo de aplicaciones: los desarrolladores tienen acceso completo a los mismos APIs
del framework usados por las aplicaciones base. La arquitectura está diseñada para simplificar la
reutilización de componentes; cualquier aplicación puede publicar sus capacidades y cualquier
otra aplicación puede luego hacer uso de esas capacidades (sujeto a reglas de seguridad del
framework). Este mismo mecanismo permite que los componentes sean reemplazados por el
usuario.
Bibliotecas: Android incluye un conjunto de bibliotecas de C/C++ usadas por varios componentes
del sistema. Estas características se exponen a los desarrolladores a través del marco de trabajo de
aplicaciones de Android; algunas son: System C library (implementación biblioteca C estándar),
bibliotecas de medios, bibliotecas de gráficos, 3D y SQLite, entre otras.
Diego Altamirano Cabrera.
Runtime de Android: Android incluye un set de bibliotecas base que proporcionan la mayor parte
de las funciones disponibles en las bibliotecas base del lenguaje Java. Cada aplicación Android
corre su propio proceso, con su propia instancia de la máquina virtual Dalvik. Dalvik ha sido escrito
de forma que un dispositivo puede correr múltiples máquinas virtuales de forma eficiente. Dalvik
ejecuta archivos en el formato Dalvik Executable (.dex), el cual está optimizado para memoria
mínima. La Máquina Virtual está basada en registros y corre clases compiladas por el compilador
de Java que han sido transformadas al formato.dex por la herramienta incluida "dx".
Núcleo Linux: Android depende de Linux para los servicios base del sistema como seguridad,
gestión de memoria, gestión de procesos, pila de red y modelo de controladores. El núcleo
también actúa como una capa de abstracción entre el hardware y el resto de la pila de software.
1.3Diseño y desarrollo
Android, al contrario que otros sistemas operativos para dispositivos móviles como iOS o Windows
Phone, se desarrolla de forma abierta y se puede acceder tanto al código fuente85 como al listado
de incidencias donde se pueden ver problemas aún no resueltos y reportar problemas nuevos.
El que se tenga acceso al código fuente no significa que se pueda tener siempre la última versión
de Android en un determinado móvil, ya que el código para soportar el hardware (controladores)
de cada fabricante normalmente no es público, así que faltaría un trozo básico del firmware para
poder hacerlo funcionar en dicho terminal, y porque las nuevas versiones de Android suelen
requerir más recursos, por lo que los modelos más antiguos quedan descartados por razones de
memoria (RAM), velocidad de procesador, etc.
En sus comienzos, Android era eminentemente un sistema operativo pensado para usar con
teclado, y gracias a un cursor poder navegar entre las aplicaciones. Desde su comienzo, Android ha
sido altamente personalizable. Poco después, antes del lanzamiento del primer teléfono Android,
esta filosofía cambió para convertirse en eminentemente táctil, y poder competir contra el recién
lanzado iPhone.
Diego Altamirano Cabrera.
2.1 Arquitectura de una aplicación Android.
La plataforma Android nos proporciona diferentes componentes a la hora de programar aquello
que queremos que haga nuestra aplicación. Cuatro son los elementos básicos que tenemos que
conocer:
Activity: Es cada una de las pantallas que conforman nuestra aplicación. En ella recae la
responsabilidad de presentar los elementos visuales y reaccionar a las acciones del usuario. Toda
Activity se inicia como respuesta a un Intent.
Intent: Este tipo de componente es el que utiliza Android para moverse de una pantalla a otra. Se
puede entender como aquello que la aplicación desea hacer. Cuando se lanza un Intent el sistema
busca qué Activity es capaz de dar respuesta a ese Intent y elige la más adecuada.
Service: Es una tarea que se ejecuta durante periodos prolongados y en el background de la
aplicación. No cuenta con una interfaz por lo que el usuario no interactúa de forma directa con
este componente. Un ejemplo simple de un Service lo podemos encontrar en una aplicación que
necesite ir capturando la posición del GPS cada cierto tiempo y nos notifique cuando ya estemos
cerca de nuestro destino; mientras tanto el usuario puede utilizar su dispositivo para realizar otras
tareas.
Content Provider: Es un almacén de información provisto desde una API mediante el cual, el
usuario y la aplicación pueden accesar al contenido sin necesidad de conocer los detalles del
almacenamiento.
Dependiendo del autor del libro o de la fuente consultada, podrán también encontrar que algunos
hablan de un quinto elemento llamado Broadcast Receivers, que se utilizan para recibir y
reaccionar ante ciertas notificaciones broadcast. Estos, al igual que los Service, no poseen una
interfaz de usuario y pueden reaccionar ante eventos como el cambio de zonas horarias, llamadas,
nivel de batería, etc. Todos los objetos de tipo Receiver heredan de la clase BroadcastReceiver.
Hay que aclarar que no todas las aplicaciones tienen que tener estos cuatro elementos; en la
mayoría de los casos nos encontraremos con aplicaciones que tengan una mezcla de algunos de
ellos, pero eso sí, al menos ha de tener uno de los cuatro. No hay que olvidar que los elementos de
Android son finalmente objetos y por lo tanto estos cuatro también lo son. Su comportamiento
está definido en su correspondiente clase base y todo elemento que queramos implementar será
una subclase del elemento original. Esto lo vamos a lograr por medio de la herencia, una
característica básica de Java, y que nos evitará tener que volver a implementar aspectos comunes
en todos los objetos del mismo tipo, y poder al mismo tiempo, personalizar su comportamiento
tanto como lo necesite nuestra aplicación por medio de la sobre escritura de los métodos de la
clase padre.
Todos los elementos que vaya a utilizar nuestra aplicación debemos declararlos en el archivo
AndroidManifest.xml .
Diego Altamirano Cabrera.
2.2 Los procesos en Android
En la mayoría de los casos, una aplicación Android se ejecuta en su propio proceso de Linux. Este
proceso es creado para la aplicación cuando la arrancamos y seguirá corriendo hasta que no sea
necesario y el sistema reclame recursos para otras aplicaciones y se los de a éstas.
Así es, el tiempo de vida de un proceso en Android es manejada por el sistema operativo,
basándose en las necesidades del usuario, los recursos disponibles, etc. Si tenemos una aplicación
que está consumiendo muchos recursos y arrancamos otra nueva aplicación, el sistema operativo
probablemente le diga a la aplicación que se queda en segundo plano que libere todo lo que
pueda, y si es necesario la cerrará.
En Android los recursos son normalmente muy limitados y por eso el sistema operativo tiene más
control sobre las aplicaciones que en programas de escritorio.
Para determinar qué procesos eliminar ante un escenario dónde el dispositivo tenga poca batería
u otros en los que sea de relevante importancia administrar los recursos, Android les asigna una
prioridad a cada uno de ellos basándose en la siguiente jerarquía:
Foreground Process: Es la aplicación que contiene la actividad ejecutada en primer plano en la
pantalla del usuario y con la cuál está interactuando ahora mismo (Se ha llamado a su método
onResume()). Por lo regular habrá muy pocos procesos de este tipo corriendo a la vez en el
sistema y son aquellos que se eliminarán como última opción si la memoria es tan baja que ni
matando al resto de procesos tenemos los recursos necesarios.
Visible Process: Es un proceso que aloja una Activity que no se está ejecutando en primer plano
(es decir, su método onPause() ha sido llamado). Un ejemplo puede ser la aplicación de correo en
la cuál demos click en algún enlace de interés que nos lance el navegador, este pasaría a ser el
Foreground Process dejando a la aplicación de correo en el concepto de Visible Process. Este tipo
de procesos se cerrarán únicamente cuando el sistema no tenga los recursos necesarios para
mantener corriendo todos los procesos que estén en primer plano.
Service Process: Son aquellos que corren cuando un Service ha sido invocado. Estos procesos
hacen cosas en segundo plano que normalmente son importantes para el usuario (conexión con
servidores, actualización del GPS, reproductor de música, etc.), el sistema nunca va a liquidar un
servicio a menos que sea necesario para mantener vivos todos los Visible y Foreground.
Background Process: Es un proceso que contiene una Activity que actualmente no es visible por el
usuario y que ya no tienen demasiada importancia. Por ejemplo, los programas que arrancó el
usuario hace tiempo y no los ha vuelto a usar, pasan a estar en background. Por eso es importante
que cuando nuestra aplicación pase a Background, el sistema libere, en la medida de lo posible,
todos los recursos que pueda para que su rendimiento sea óptimo.
Diego Altamirano Cabrera.
Empty Process: Es un proceso que no aloja ningún tipo de componente. Su razón de ser es el de
tener una caché disponible para la próxima aplicación que lance el usuario. Es común que el
sistema elimine este tipo de procesos con frecuencia para así poder obtener memoria disponible.
2.3 Ciclo de vida de una aplicación Android
Aunque el sistema operativo sea el que en cualquier momento pueda pausar, parar o destruir
nuestra aplicación según las necesidades de recursos del dispositivo, nosotros debemos aprender
a controlar todos estos eventos para hacer nuestras aplicaciones robustas.
Diego Altamirano Cabrera.
Pasemos a explicar cada uno de los métodos:
onCreate(): Se dispara cuando la Activity es llamada por primera vez. Aquí es donde debemos
crear la inicialización normal de la aplicación, crear vistas, hacer los bind de los datos, etc. Este
método te da acceso al estado de la aplicación cuando se cerró. Después de esta llamada siempre
se llama al onStart().
onRestart(): Se ejecuta cuando tu Activity ha sido parada, y quieres volver a utilizarla. Si ves el
diagrama podrás ver que después de un onStop() se ejecuta el onRestart() e inmediatamente
llama a un onStart().
onStart(): Se ejecuta cuando la Activity se está mostrando apenas en la pantalla del dispositivo del
usuario.
onResume(): Se ejecuta una vez que la Activity ha terminado de cargarse en el dispositivo y el
usuario empieza a interactuar con la aplicación. Cuando el usuario ha terminado de utilizarla es
cuando se llama al método onPause().
onPause(): Se ejecuta cuando el sistema arranca una nueva Activity que necesitará los recursos del
sistema centrados en ella. Hay que procurar que la llamada a este método sea rápida ya que hasta
que no se termine su ejecución no se podrá arrancar la nueva Activity. Después de esta llamada
puede venir un onResume() si la Activity que haya ejecutado el onPause() vuelve a aparecer en
primer plano o un onStop() si se hace invisible para el usuario.
onStop(): Se ejecuta cuando la Activity ya no es visible para el usuario porque otra Activity ha
pasado a primer plano. Si vemos el diagrama, después de que se ha ejecutado este método nos
quedan tres opciones: ejecutar el onRestart() para que la Activity vuelva a aparecer en primer
plano, que el sistema elimine este proceso porque otros procesos requieran memoria o ejecutar el
onDestroy() para apagar la aplicación.
onDestroy(): Esta es la llamada final de la Activity, después de ésta, es totalmente destruida. Esto
pasa por los requerimientos de memoria que tenga el sistema o porque de manera explícita el
usuario manda a llamar este método. Si quisiéramos volver a ejecutar la Activity se arrancaría un
nuevo ciclo de vida.
Diego Altamirano Cabrera.
Fuentes:
developer.android.com
wikipedia.es
gdroid.com.mx
Descargar