4. Android (1)
Introducción (1)
◦ S.O basado en Linux
◦ Desarrollado por Android Inc y comprado por
Google en 2005
◦ Es el principal producto de la Open Handset
Alliance
78 empresas – Las top 12 son:
Google, HTC, Dell, Intel, Motorola, Qualcomm, Texas
Instrument, Samsung, LG, T-Mobile, Ndivia y Wind River
Systems
◦ Cuota de penetración del mercado superior
al 30%
4
6. Android (3)
Introducción (3)
◦ Actualmente hay más de 200.000
aplicaciones desarrolladas
◦ Se obtienen a través de Android Market
◦ Las aplicaciones se desarrollan en Java
◦ Google liberó Android bajo licencia de
Apache
Libre
Código Abierto
6
7. Android (4)
Introducción (4)
◦ Características por Versión (1)
7
8. Android (5)
Introducción (6)
◦ Características por Versión (2)
8
9. Android (6)
Introducción (7)
◦ Características por Versión (3)
9
10. Android (7)
Introducción (8)
◦ Características por Versión (4)
10
11. Android (8)
Introducción (9)
◦ Características por Versión (5)
11
12. Android (9)
Introducción (10)
◦ Características por Versión (y 6)
12
13. Android (10)
Introducción (y 11)
◦ Para acabar algunas estadísticas:
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++.
13
15. Android (11)
Instalación (1)
◦ Dos pasos:
Descarga/Instalación del Android SDK
Descarga/Instalación sobre Eclipse
◦ Paso 1: Descarga/Instalación Android
SDK
http://developer.android.com/sdk/index.html
descargamos la versión para nuestro S.O
Generalmente es un fichero con el nombre
“installer_rXXX-windows.exe”
XXX indica la revisión del instalador
Finalizada la instalación tendremos acceso al
SDK Manager
15
16. Android (12)
Instalación (2)
◦ Paso 2: Descarga/Instalación Eclipse (1)
http://www.eclipse.org (ultima versión 3.6 o
Helios)
Basta con descargar el zip y descomprimirlo
Luego hay que enlazarlo con Android SDK para poder
desarrollar
16
20. Android (15)
SDK Manager (1)
Herramienta que permite descargar en nuestro
entorno de trabajo las diferentes versiones del
API de Android
20
21. Android (16)
SDK Manager (2)
Virtual Devices: permite manipular los
diferentes dispositivos para los que
desarrollaremos.
Installed Packages: muestra una lista de los
diferentes APIs y herramientas instaladas en
nuestra máquina
Available Packeges: relación de paquetes
disponibles para descargar desde el sitio web
de desarrollo de Android
Settings: configuración de los valores de proxy
para el descargador
21
22. Android (17)
SDK Manager (3)
◦ Los Android Virtual Device (AVD)
permiten crear dispositivos virtuales sobre
los que probar nuestra aplicación.
◦ Son muy fáciles de configurar:
Al seleccionar el Target se actualizan las
propiedades básicas de Hardware para ese
Target (pueden añadirse más)
22
23. Android (18)
SDK Manager (3)
Nombre de nuestra configuración
Dispositivo objetivo (depende de lo que hayamos
instalado)
Tamaño de la tarjeta de almacenamiento
Permite salvar snapshot (instantaneas) del
dispositivo
Características de Pantalla
Propiedades del Hardware
23
25. Android (20)
SDK Manager (5)
◦ Propiedades Hardware (1):
SD Card Support
El dispositivo admite la inserción/extracción de
tarjetas SD virtuales
Dpad support
Si el dispositivo tiene teclado Dpad
Accelerometer
Si el dispositivo tiene acelerometro
Maximun horizontal/vertical camera pixels
Pixeles horizontal/vertical de la camara
Cache Partition Size
Tamaño en disco para la cache
25
26. Android (21)
SDK Manager (6)
◦ Propiedades Hardware (2):
Audio playback support
El dispositivo tiene soporte para audio
Trackball support
El dispositivo tiene soporte para trackball
Camara support
El dispositivo tiene cámara
Batery support
El dispositivo puede funcionar con batería
Touch screen support
El dispositivo tiene pantalla táctil
26
27. Android (22)
SDK Manager (7)
◦ Propiedades Hardware (3):
Audio recording support
El dispositivo puede grabar audio
GPS support
El dispositivo dispone de GPS
Cache partition support
El dispositivo tiene soporte para el uso de memoria
cache
Keyboard support
El dispositivo tiene teclado QWERTY
Max VM application heap size
Tamaño máximo del VM del heap de la aplicación
27
28. Android (23)
SDK Manager (y 8)
◦ Propiedades Hardware (y 4):
Device Ram size
Tamaño en MB de la RAM del dispositivo
GSM modem support
El dispositivo tiene soporte para modem GSM
28
31. Android (25)
Arquitectura (2)
◦ Dalvik
es la máquina virtual que utiliza la plataforma
Android
ha sido diseñada por Dan Bornstein con
contribuciones de otros ingenieros de Google
está optimizada para requerir poca memoria
está diseñada para permitir ejecutar varias
instancias de la máquina virtual
simultáneamente
No funciona con Java Bytecode sin embargo
puede transformarse un class en dex con la
herramienta dx.
31
32. Android (26)
Arquitectura (3)
◦ Aplicaciones
Todas las aplicaciones están escritas en lenguaje de
programación Java (se incluye un conjunto de
aplicaciones base como son: cliente de correo
electrónico, programa de
SMS, calendario, mapas, navegador, contactos y otros)
◦ Marco de trabajo de Aplicaciones:
los desarrolladores tienen acceso completo a los
mismos APIs del framework usados por las aplicaciones
base.
Está diseñada para simplificar la reutilización de
componentes
cualquier aplicación puede publicar sus capacidades
cualquier otra aplicación puede luego hacer uso de
esas capacidades
sujeto a reglas de seguridad del framework
32
33. Android (27)
Arquitectura (4)
◦ Bibliotecas:
Conjunto de bibliotecas de C/C++ usadas por varios
componentes del sistema.
Se exponen a los desarrolladores a través del marco de
trabajo de aplicaciones de Android
System C library: implementación biblioteca C estándar)
Media Library: basada en OpenCORE soporta los formatos
siguientes: MPEG4, H.264, MP3, AAC, AMR, JPG, y PNG
Surface Manager: Acceso al subsistema de visualización para
crear gráficos en 2D y 3D
LibWebCore: Motor del navegador web
SGL: Motor del sistema gráfico 2D
3D Libraries: OpenGL ES 1.0
FreeType: Renderizado de bitmaps y vector
SQLite: Motor de base de datos relacional
33
34. Android (28)
Arquitectura (y 5)
◦ Runtime de Android:
Set de bibliotecas base que proporcionan la mayor
parte de las funciones disponibles en las
bibliotecas base del lenguaje Java.
◦ Núcleo Linux:
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.
34
36. Android (29)
Fundamentos (1)
◦ Las aplicaciones Android están escritas
en Java
◦ El código Java compilado (más sus
recursos) se empaquetan mediante la
herramienta appt
◦ Los ficheros empaquetados y distribuibles
tienen la extensión .apk
Son los ficheros que se instalan en el
dispositivo
Es lo que se considera una aplicación Android
36
37. Android (30)
Fundamentos (2)
◦ Cada aplicación se caracteriza por:
Ejecutarse en su propio proceso Linux
El proceso se inicia cuando el código necesita ser
ejecutado
El proceso finaliza cuando el código acaba y se
necesitan recursos para otras aplicaciones
Cada proceso tiene su propia maquina virtual
Las aplicaciones se ejecutan aisladas del código de
otras aplicaciones
Cada aplicación tiene asignada un user ID
Permite la gestión de los permisos de la aplicación
37
38. Android (31)
Fundamentos (3)
◦ Componentes de Aplicación (1)
Se pueden usar componentes de otras aplicaciones
existentes
El código invocado no se incorpora al código de tú
aplicación es invocado por nuestra aplicación y
ejecutado desde la aplicación que lo proporciona
El sistema es capaz de iniciar un proceso de aplicación
cuando una parte de la misma lo necesita
El sistema instancia únicamente los objetos Java de
esa parte que queremos invocar
No existe un único punto de entrada a la aplicación (no
hay main()) sino componentes que se instancian según
las necesidades
Activities
Services
Broadcast receivers
38
Content providers
39. Android (32)
Fundamentos (4)
◦ Componentes de Aplicación (2)
Activities
Presentan un interface visual de usuario
Puede haber una o varias por aplicación
Pueden estar relacionadas entre si, en cuyo caso se
especifica cual es la primera que debe aparecer
Cada actividad dispone de una ventana por defecto
para mostrarse
Por defecto ocupan toda la pantalla pero puede
ajustarse el tamaño o incluso ser flotantes
Los objetos que se muestran en la pantalla pertenecen
a la clase “View”
Funciona de modo jerárquico
39
40. Android (33)
Fundamentos (5)
◦ Componentes de Aplicación (3)
Servicies
Carecen de interface de usuario
Se ejecutan en segundo plano por tiempo indefinido
Se ejecutan en el hilo principal del proceso de la
aplicación
Es posible conectarse con un servicio a través de la
interface que expongan al exterior
Cada servicio hereda de la clase “Services” del API
de Android
40
41. Android (34)
Fundamentos (6)
◦ Componentes de Aplicación (4)
Broadcast Receivers
Son componentes cuya función es recibir
notificaciones de que “algo” ha sucedido en el sistema
y retransmitirlo a la aplicación que lo implemente
No presentan interface de usuario aunque pueden
iniciar actividades o usar el “NotificationManager”
para alertar al usuario (encendiendo el flash, vibración,
activando sonido, etc.)
O ponen un icono en la barra de estado
Una aplicación puede tener cualquier número de estos
componentes
Extienden de la clase “BroadcastReceiver”
41
42. Android (35)
Fundamentos (7)
◦ Componentes de Aplicación (5)
Content Provider
Permiten que un conjunto de datos de una aplicación
estén disponibles para otra.
Los datos pueden estar en el sistema de ficheros, en
una base de datos SQLite, etc.
Extienden de la clase “ContentProvider”
No se llaman a los métodos directamente sino a
través de un objeto “ContentResolver”
42
43. Android (36)
Fundamentos (8)
◦ Activación de Componentes (1)
Los Content Provider se activan por un ContentResolver
El resto hacen uso de los “Intents”
Son mensajes asíncronos de diferentes clases
Se representan mediante objetos de la clase “Intent”
MÉTODOS RELACIONADOS CON LA ACTIVACION DE COMPONENTES
Actividades Context.startActivity()
Activity.startActivitiyForResult()
getIntent()
onNewIntent()
onActivityResult()
Servicios Context.startService()
Context.bindService()
onStart()
onBind()
Broadcast Context.sendBroadcast()
Context.sendOrderedBroadcast()
Context.sendStickyBroadcast()
onReceive() 43
44. Android (37)
Fundamentos (9)
◦ Activación de Componentes (2)
Intent Filters
Android los utiliza para asociar un Intent con un
componente
Informan a Android del tipo Intents que el componente
es capaz de manejar
Se declaran en el fichero de manifiesto dentro de las
actividades a las que pertenecen
44
45. Android (38)
Fundamentos (10)
◦ Desactivación de Componentes
Los Content Provider solo están activos
mientras responden una petición de un
ContentResolver por lo que no hay necesidad
de desactivarlos manualmente.
MÉTODOS RELACIONADOS CON LA DESACTIVACION DE COMPONENTES
Actividades finish()
finishActivity()
Servicios stopSelf()
Context.stopService()
45
46. Android (39)
Fundamentos (11)
◦ El Fichero de Manifiesto (1)
Es un fichero XML, en donde una aplicación
declara:
los componentes que posee
las librerías que necesita
los permisos necesarios
Se denomina “AndroidManifest.xml” y se localiza
en el directorio raíz
Tags importantes:
<activity>
<service>
<receiver>
<provider>
46
47. Android (40)
Fundamentos (12)
◦ El Fichero de Manifiesto (2)
47
48. Android (41)
Fundamentos (13)
◦ Ciclo de Vida de los Componentes (1)
Abarca desde que el componente es
instanciado para responder a un Intent hasta
que es destruido
Cada componente tiene su propio ciclo de vida,
por tanto distinguimos entre:
Ciclo de Vida de Activities
Ciclo de Vida de Services
Ciclo de Vida de BroadCast
48
49. Android (42)
Fundamentos (14)
◦ Ciclo de Vida de los Componentes (2)
Ciclo de Vida de Activities (1)
Tres estados principales (1):
Activo o Running
Está en ejecución en la pantalla y es el centro de la
interacción con el usuario
Pausado
Ha perdido el foco pero es visible para el usuario.
Puede ser eliminada por el S.O si necesita
memoria
Mantiene el estado de sus elementos hasta que
vuelve a estar activa o se elimina
49
50. Android (43)
Fundamentos (15)
◦ Ciclo de Vida de los Componentes (3)
Ciclo de Vida de Activities (2)
Tres estados principales (y 2):
Stop
No es visible para el usuario ya que su ventana de
ejecución está oculta
Es eliminada por el sistema si necesita memoria
Todavía mantiene su estado e información de sus
miembros
50
51. Android (44)
Fundamentos (16)
◦ Ciclo de Vida de los Componentes (4)
Ciclo de Vida de Activities (3)
La transición entre estados se realiza mediante los
Debe ser métodos siguientes:
implementado void onCreate(…)
obligatoriamente void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
51
52. Android (45)
Fundamentos (17)
◦ Ciclo de Vida de los Componentes (5)
Ciclo de Vida de Activities (y 4)
Los métodos onPause(), onStop() y onDestroy()
pueden ser eliminados por el sistema al “matar” (kill) el
proceso sobre el que corre la actividad
Android solo garantiza la ejecución de onPause() por
tanto todo el código persistente debe de ir en este
método
Es diferente a salvar el estado de la actividad
Se usa un
onSaveInstanceState() objeto Bundle
onRestoreInstanceState() con pares
clave-valor que
se puede
recuperar 52
53. Android (46)
Fundamentos (18)
◦ Ciclo de Vida de los Componentes (6)
Ciclo de Vida de Services (1)
Dos modos de operación:
Se inician y ejecutan hasta que alguien o ellos
mismos lo paran:
Context.startService() / Context.stopService()
Service.stopSelf() / Service.stopSelfResult()
Mediante una conexión de un cliente con el servicio
a través de un interface que expongan
Context.bindService() / Context.unbindService()
53
54. Android (47)
Fundamentos (19)
◦ Ciclo de Vida de los Componentes (7)
Ciclo de Vida de Services (y 2)
Estos modos de operación se reflejan en los métodos
de ciclo de vida:
onCreate()
onStart(Intent intent)
Opcionales onDestroy()
(sólo si se onBind()
permite el
enlace con el onUnbind()
servicio)
54
55. Android (48)
Fundamentos (20)
◦ Ciclo de Vida de los Componentes (y 8)
Ciclo de Vida de Broadcast Receiver
Solo tienen un único método de ciclo de vida
onReceive(Context, Intent)
Cuando un mensaje llega a un receptor se ejecuta su
método onReceive
55
56. Android (49)
Fundamentos (21)
◦ Procesos y Ciclo de Vida (1)
Android mantiene los procesos de aplicación
vivos todo el tiempo que es posible
Elimina los procesos viejos cuando necesita memoria
Para ello usa un sistema de nivel de prioridad
jerárquico con cinco niveles:
Proceso en primer plano Más
Proceso visible prioridad
Proceso de servicio
Proceso en segundo plano
Proceso vacio Menos
prioridad
56
57. Android (y 50)
Fundamentos (y 22)
◦ Procesos y Ciclo de Vida (y 2)
Android asigna la prioridad mayor que puede al
proceso dentro de la lista anterior
Si un proceso sirve a otro, el que sirve tiene mayor
prioridad que el servido o al menos la misma
57