Android Studio Basic’s

¿Qué es Android?

Es un sistema operativo basado en el kernel de Linux. Está diseñado específicamente para teléfonos inteligentes y tabletas.

Fue creado originalmente por Android Inc. y vendido a Google en el 2005.

En el 2008 sale al mercado el primer dispositivo móvil con sistema operativo Android.

Para el 2011 más de la mitad de la población mundial utiliza dispositivos Android.

Android vs …

Basado en el núcleo de Linux, lo cual convierte a Android en un sistema Libre, Gratuito y Multiplataforma.

El sistema permite crear aplicaciones en una variación de Java llamado Dalvik.

El sistema proporciona las interfaces necesarias para que las aplicaciones hagan uso de las funcionalidades del teléfono, como el GPS, las herramientas nativas, entre otros.

Características

1.Marco de aplicación que permite la reutilización y el reemplazo de los componentes.

2.Dalvik optimizado para dispositivos móviles.

3.Navegador integrado basado en la apertura del motor WebKit.

4.Gráficos mejorados con la biblioteca de gráficos 2D; gráficos en 3D basado en la especificación OpenGL ES 1.0.

5. SQLite para el almacenamiento de datos estructurados.

6.Soporte para audio, vídeo, y formatos de imagen (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF).

7.Telefonía GSM (dependiente del hardware).

8.Bluetooth, EDGE, 3G, y Wi-Fi (dependiente del hardware).

9.Cámara, GPS, brújula, y acelerómetro (dependiente del hardware).

10.Entorno de desarrollo muy completo, incluyendo un emulador, herramientas de depuración, de memoria, perfiles de rendimiento, y un plug-in para el IDE de Eclipse.

Picture1

Arquitectura: Aplicaciones

Se conforma por todas las aplicaciones por defecto que contiene el dispositivo, más las aplicaciones que le agreguen al pasar el tiempo, más las aplicaciones creadas por la misma persona.

Esta capa utiliza todos los servicios y librerías de la capa anterior.

Se conforma por todas las aplicaciones por defecto que contiene el dispositivo, más las aplicaciones que le agreguen al pasar el tiempo, más las aplicaciones creadas por la misma persona.

Arquitectura: Framework de Aplicaciones

Representa básicamente las herramientas que toda aplicación (por defecto, de terceros o propia) utiliza para su desarrollo. Cualquier aplicación hace uso de los mismos API’s o frameworks.

Entre las más importantes están:

1.Activity Manager: gestiona el ciclo de vida de las aplicaciones.

2.Windows Manager: gestiona las ventanas de las aplicaciones.

3.Telephone Manager: gestiona las funcionalidades propias del teléfono, como llamadas, mensajes, calendario, reloj, entre otros.

Esta capa utiliza todos los servicios y librerías de la capa anterior.

Arquitectura: Librerías

Esta capa corresponde a las librerías utilizadas por Android. Están escritas en C/C++ y proporciona a Android la mayoría de sus capacidades más características.

Junto al núcleo de Linux, constituye el corazón de Android.

Entre las más importantes, están:

1.Surface Manager: se encarga de componer todos los elementos de navegación de la pantalla.

2.OpenGL/SL y SGL: constituye las librerías gráficas, lo cual significa que soporta la capacidad gráfica de Android. OpenGL permite gráficos en 3D y SGL (la más utilizada) permite gráficos en 2D.

3.Media Libraries: permite el manejo de contenido multimedia soportado por Android (video, audio, imágenes estáticas y dinámicas).

4.Free Type: permite el uso de diferentes tipos de fuente.

5.SQLite Library: permite el manejo de datos relacionales.

Arquitectura: Android Runtime

Comprende el entorno de ejecución de Android.

Se encuentra al mismo nivel que las librerías. Lo constituye las Core Libraries (clases de Java) y la máquina virtual Dalvik.

Arquitectura: Linux Kernel

Funciona como una capa de abstracción para el hardware disponible en los dispositivos móviles.

Esta capa contiene los drivers para que cualquier hardware pueda ser utilizado por las aplicaciones.

Cada vez que se incluya un nuevo elemento hardware, se debe crear las librerías de control o drivers (dentro del kernel) necesarios para el uso de Android.

Dalvik VM

Este es el nombre que recibe la máquina virtual de Android.

Es un intérprete que solo ejecuta archivos ejecutables con extensión .dex. Este formato está optimizado para el almacenamiento eficiente de memoria, esto lo consigue delegando al kernel el manejo de hilos, de memoria y de procesos.

La herramienta dx incluida en el sdk de Android permite transformar las clases compiladas (.class) por un compilador de lenguaje Java en formato .dex.

DVM vs JVM

1.En primer lugar, la máquina virtual de Dalvik toma los archivos generados por las clases Java y los combina en uno o más archivos ejecutables Dalvik (.dex), los cuales a su vez son comprimidos en un sólo fichero .apk (Android Package) en el dispositivo.

De esta forma, reutiliza la información duplicada por múltiples archivos .class, reduciendo así la necesidad de espacio (sin comprimir) a la mitad de lo que ocuparía un archivo .jar.

2.Google ha mejorado la recolección de basura en la máquina virtual de Dalvik.

3.La máquina virtual de Dalvik utiliza un tipo diferente de montaje para la generación del código, en el que se utilizan los registros como las unidades primarias de almacenamiento de datos en lugar de la pila. Hay que señalar que el código ejecutable final de Android, como resultado de la máquina virtual de Dalvik, no se basa en el bytecode de Java, sino que se basa en los archivos .dex. Esto significa que no se puede ejecutar directamente el Bytecode de Java, sino que hay que comenzar con los archivos .class de Java y luego convertirlos en archivos .dex.

Picture2

Aplicaciones Android

Una aplicación Android corre dentro de su propio proceso Linux, por tanto, una característica fundamental de Android es que el tiempo y ciclo de vida de una aplicación no está controlado por la misma aplicación sino que lo determina el sistema a partir de una combinación de estados como pueden ser qué aplicaciones están funcionando, qué prioridad tienen para el usuario y cuánta memoria queda disponible en el sistema.

Una aplicación en Android debe declarar todas sus actividades, los puntos de entrada, la comunicación, las capas, los permisos, y las intenciones a través de AndroidManifest.xml

Componentes

1.Activity.

Es el componente más habitual de las aplicaciones para Android. Un componente Activity refleja una determinada actividad llevada a cabo por una aplicación, y que lleva asociada típicamente una ventana o interfaz de usuario. La mayoría de las aplicaciones permiten la ejecución de varias acciones a través de la existencia de una o más pantallas.

Una actividad tiene un ciclo de vida muy definido, que será igual para todas las actividades. Este ciclo de vida es impuesto por el SDK de Android. Las actividades tienen cuatro posibles estados: Activa(onStart), pausada(onPause), parada(onStop) y reiniciada(onResume).

2.Intent:

Un Intent consiste básicamente en la voluntad de realizar alguna acción, generalmente asociada a unos datos. Lanzando un Intent, una aplicación puede delegar el trabajo en otra, de forma que el sistema se encarga de buscar qué aplicación de entre las instaladas, es la que puede llevar a cabo la acción solicitada.

Los Intents están incluidos en el AndroidManifest porque describen dónde y cuándo puede comenzar una actividad.

3.Broadcast Intent Receiver:

Se utiliza para lanzar alguna ejecución dentro de la aplicación actual cuando un determinado evento se produzca (generalmente, abrir un componente Activity).

Este componente no tiene interfaz de usuario asociada, pero puede utilizar el API Notification Manager para avisar al usuario del evento producido a través de la barra de estado del dispositivo móvil.

No es necesario que la aplicación en cuestión sea la aplicación activa en el momento de producirse el evento.

4.Service:

Un componente Service representa una aplicación ejecutada sin interfaz de usuario, y que generalmente tiene lugar en segundo plano mientras otras aplicaciones (éstas con interfaz) son las que están activas en la pantalla del dispositivo.

5.Content Provider:

Con el componente Content Provider, cualquier aplicación en Android puede almacenar datos en un fichero, en una base de datos SQLite o en cualquier otro formato que considere. Además, estos datos pueden ser compartidos entre distintas aplicaciones. Una clase que implementa el componente Content Provider contendrá una serie de métodos que permiten almacenar, obtener, actualizar y compartir los datos de una aplicación.

Cada aplicación de Android corre en su propio proceso, el cual es creado por la aplicación cuando se ejecuta y permanece hasta que la aplicación deja de trabajar o el sistema necesita memoria para otras aplicaciones. Android sitúa cada proceso en una jerarquía basada en estados:

1.Active Process.

2.Visible Process.

3.Started Service Process.

4.Background Process.

5.Empty Process.

Active Process:

Es un proceso que aloja una Activity en la pantalla y con la que el usuario está interactuando o que un IntentReceiver está ejecutándose.

Este tipo de procesos serán eliminados como último recurso si el sistema necesita memoria.

Visible Process:

Es un proceso que aloja una Activity pero no está en primer plano. Esto ocurre en situaciones dónde la aplicación muestra un cuadro de diálogo para interactuar con el usuario.

Este tipo de procesos serán eliminados únicamente en caso que sea necesaria la memoria para mantener a todos los procesos de tipo Active Process.

Started Service Process:

Es un proceso que aloja un Service que ha sido iniciado con el método startService().

Este tipo de procesos no son visibles y suelen ser importantes para el usuario.

Background Process:

Es un proceso que aloja una Activity que no es actualmente visible para el usuario. Normalmente la eliminación de estos procesos no suponen un gran impacto para la actividad del usuario.

Es muy usual que existan numerosos procesos de este tipo en el sistema, por lo que el sistema mantiene una lista para asegurar que el último proceso visto por el usuario sea el último en eliminarse en caso de necesitar memoria.

Empty Process:

Es un proceso que no aloja ningún componente. La razón de existir de este proceso es tener una caché disponible de la aplicación para su próxima activación.

Es común, que el sistema elimine este tipo de procesos con frecuencia para obtener memoria disponible.

Picture3

Para los procesos de tipo Background Process, existe una lista llamada LRU (Least Recently Used). Así el sistema se asegura de mantener vivos los procesos que se han usado recientemente.

Ciclo de Vida del Activity

El hecho de que cada aplicación se ejecuta en su propio proceso aporta beneficios en cuestiones básicas como seguridad, gestión de memoria, o la ocupación de la CPU del dispositivo móvil. Android se ocupa de lanzar y parar todos estos procesos, gestionar su ejecución y decidir qué hacer en función de los recursos disponibles y de las órdenes dadas por el usuario.

Android lanza tantos procesos como permitan los recursos del dispositivo.  Cada proceso, correspondiente a una aplicación, estará formado por una o varias actividades independientes de esa aplicación. Cuando el usuario navega de una actividad a otra, o abre una nueva aplicación, el sistema duerme dicho proceso y realiza una copia de su estado para poder recuperarlo más tarde. El proceso y la actividad siguen existiendo en el sistema, pero están dormidos y su estado ha sido guardado. Es entonces cuando crea, o despierta si ya existe, el proceso para la aplicación que debe ser lanzada, asumiendo que existan recursos para ello.

Cada uno de los componentes básicos de Android tiene un ciclo de vida bien definido; esto implica que el desarrollador puede controlar en cada momento en qué estado se encuentra dicho componente, pudiendo así programar las acciones que mejor convengan.

Picture4

De la figura anterior, pueden sacarse las siguientes conclusiones:

1.onCreate(), onDestroy(): Abarcan todo el ciclo de vida. Cada uno de estos métodos representan el principio y el fin de la actividad.

2.onStart(), onStop():  Representan la parte visible del ciclo de vida. Desde onStart() hasta onStop(), la actividad será visible para el usuario, aunque es posible que no tenga el foco de acción por existir otras actividades superpuestas con las que el usuario está interactuando. Pueden ser llamados múltiples veces.

3.onResume(), onPause(): Delimitan la parte útil del ciclo de vida. Desde onResume() hasta onPause(), la actividad no sólo es visible, sino que además tiene el foco de la acción y el usuario puede interactuar con ella.

El proceso que mantiene a una Activity puede ser eliminado cuando se encuentra en onPause() o en onStop(), es decir, cuando no tiene el foco de la aplicación.

Android nunca elimina procesos con los que el usuario está interactuando en ese momento. Una vez se elimina el proceso, el usuario desconoce dicha situación y puede incluso volver atrás y querer usarlo de nuevo. Entonces el proceso se restaura gracias a una copia y vuelve a estar activo como si no hubiera sido eliminado.

Una Activity puede haber estado en segundo plano, invisible, y entonces ser despertada pasando por el estado onRestart().

En el momento en el que Android detecte que no hay los recursos necesarios para poder lanzar una nueva aplicación, analiza los procesos existentes en ese momento y elimina los procesos que sean menos prioritarios para poder liberar sus recursos.

Cuando el usuario regresa a una actividad que está dormida, el sistema simplemente la despierta.

En este caso, no es necesario recuperar el estado guardado porque el proceso todavía existe y mantiene el mismo estado. Sin embargo, cuando el usuario quiere regresar a una aplicación cuyo proceso ya no existe porque se necesitaba liberar sus recursos, Android lo crea de nuevo y utiliza el estado previamente guardado para poder restaurar una copia fresca del mismo.

Modelo de Seguridad

Cada proceso en Android proporciona  un  entorno  seguro  de  ejecución, en el que por  defecto,  ninguna  aplicación  tiene permiso  para  realizar  ninguna  operación  o  comportamiento  que  pueda  impactar negativamente en la ejecución de otras aplicaciones o del sistema mismo.

La  única  forma  de  saltarse estas restricciones impuestas por Android, es mediante la declaración explícita de un  permiso  que  autorice   llevar  a  cabo  una  determinada  acción  habitualmente prohibida.

Para establecer un permiso para una aplicación, es necesario declarar uno o más elementos <uses-permission> donde se especifica el tipo de permiso que se  desea  habilitar.

<uses-permission android:name=»android.permission.RECEIVE_SMS» />

<uses-permission android:name=»android.permission.INTERNET» />

<uses-permission android:name=»android.permission.ACCESS_NETWORK_STATE» />

<uses-permission android:name=»android.permission.READ_EXTERNAL_STORAGE» />

<uses-permission android:name=»android.permission.CAMERA» />

<uses-permission android:name=»android.permission.WRITE_EXTERNAL_STORAGE» />

Picture5

Deja un comentario