Post on 11-Feb-2017
Android:
Es un sistema operativo móvil, queriendo esto decir que está orientado a dispositivos
portátiles o móviles como lo son los smartphones, tablets, smart TVs, entre otros; Es
desarrollado por Google Inc. Con la ayuda de la Open Handset Alliance, basado en el
Kernel (Núcleo) de Linux bajo una licencia de código abierto.
¿Cómo nace Android?:
La primera aparición de Android se hace en 2003 con la fundación de Android Inc. en
Palo Alto, Estados Unidos. Esta compañía se fundó con el propósito de crear un sistema
operativo móvil de código abierto basado en el núcleo de Linux.
En 2005 Google Inc. adquiere esta empresa siendo esta la nueva responsable del
desarrollo de Android. En 2007 se funda la Open Handset Alliance, un consorcio con el
propósito de crear estándares abiertos para dispositivos móviles, la cual pasaría a formar
parte del proyecto Android con lo que la primera versión de este sistema operativo vería
la luz. A partir de ahí se seguiría desarrollando este sistema operativo hasta la actualidad.
Estructura de Android:
El sistema operativo Android está organizado en varias capas, siendo la más baja el
núcleo y la más alta las aplicaciones.
Núcleo: Esta capa es el Kernel de Linux, provee servicios genéricos tales como el
manejo de la seguridad (permisos), manejo de procesos, manejo de memoria, sistema de
archivos, E/S y los controladores del hardware. Además de estos servicios del Kernel de
Linux mencionados, también provee servicios específicos de Android como lo son el
manejo de energía (batería), el low memory killer (liberador de memoria), entre muchos
otros.
Librerías nativas: Es una variedad de librerías escritas en C y C++ usadas por el sistema
para la creación de procesos e hilos, cálculos, asignación de memoria, actualización de la
visualización, reproducción de audio y video, modelado de gráficos 3D, manejo de bases
de datos y para la representación y visualización de páginas web.
Runtime de Android: Esta capa está compuesta por un conjunto de librerías escritas en
JAVA que facilitan la programación de nuevas aplicaciones; Y por una maquina virtual. Las
aplicaciones de Android están escritas en JAVA, por lo cual se necesita una maquina virtual
que ejecute estos programas, pero, dadas las limitaciones de hardware que poseen los
dispositivos hacia los cuales está dirigido Android, no es posible utilizar la maquina virtual
de JAVA por lo que Google desarrollo una maquina virtual llamada Dalvik la cual permite
ejecutar sus aplicaciones en dispositivos móviles.
Entorno de aplicación: Esta se conforma por una gran cantidad de software reusable
que las aplicaciones necesitan tales como botones, iconos, cajas de entrada de texto,
entre otros elementos utilizados en las interfaces de usuario, la lista de aplicaciones
instaladas para facilitar la comunicación entre las aplicaciones, gestor de ventanas, gestor
de actividades, proveedor de contenido, gestor de ubicación, gestor de notificaciones,
entre otros.
Aplicaciones: Es un conjunto de aplicaciones propias de Android como la pantalla de
inicio, el marcador de teléfono, el navegador web, el lector de correo electrónico, etc.
Componentes de aplicación:
En Android cada aplicación está conformada por componentes, estos componentes son
los diferentes puntos desde los que el sistema puede ejecutar la aplicación, los hay de
cuatro tipos según el propósito que tenga en la aplicación:
Actividades (activities): Son pantallas con interfaz de usuario. Por ejemplo una
aplicación de correo electrónico puede tener una actividad que visualiza una lista de
correos recibidos, otra que edita un correo a ser enviado y otra que permite leer un
correo recibido.
Servicios (services): Son componentes que se ejecutan en segundo plano y no ofrecen
ninguna interfaz de usuario. Por ejemplo un servicio puede reproducir música mientras el
usuario está en otra aplicación.
Receptores de difusión (broadcast receivers): Estos componentes responden a
anuncios enviados a todo el sistema. Por ejemplo que la pantalla se apagó.
Proveedores de contenido (content providers): Estos se encargan de gestionar
información compartida con otras aplicaciones.
Gestión de procesos:
Cuando se inicia un componente de alguna aplicación, y esta aplicación no tiene ningún
otro componente ejecutándose, el sistema crea un nuevo proceso para esa aplicación con
un único hilo de ejecución, por defecto, todos los componentes de una misma aplicación
se ejecutan dentro de este mismo proceso y a medida que se inician más componentes se
anexan al proceso.
El sistema intenta mantener los procesos en memoria por el mayor tiempo posible,
pero si llega a necesitar memoria para procesos de mayor importancia, se verá en la
necesidad de matar procesos. Para determinar qué proceso ha de matar, el sistema le
asigna a cada proceso una prioridad, matando siempre el proceso con menor prioridad, en
caso de haber varios procesos con la misma prioridad se mata al menos recientemente
usado. Las prioridades son:
Primer plano: Estos son procesos que contienen la actividad con la que el usuario esta
interactuando en ese momento o contienen algún servicio del que dependa el proceso
que contiene a la actividad que interactúa con el usuario.
Visible: Estos son procesos que contienen alguna actividad que, aunque no está en
primer plano, es visible para el usuario, por ejemplo si se da el caso de que la actividad en
primer plano recién iniciada permita ver la actividad anterior justo tras ella, o bien
contiene algún servicio del que depende otro proceso visible.
Servicio: Son procesos que contienen servicios que, aunque no interactúan
directamente con el usuario, le incumben directamente al usuario, por ejemplo el
reproductor de música.
Segundo plano: Estos son procesos cuyos componentes no afectan a la experiencia del
usuario. Por lo general estos procesos son los matados mas comúnmente por lo que están
preparados para reanudarse en el punto en que quedaron una vez vuelven a iniciarse.
Vacio: Estos procesos no tienen componentes activos por lo que no ejecutan nada, la
única razón por la que se mantienen en memoria es para agilizar el inicio de futuros
componentes que necesiten ejecutarse en el.
La prioridad que se le asigna a un proceso siempre es la de su componente con mayor
prioridad, es decir, si su componente con mayor prioridad es Visible entonces la prioridad
del proceso será visible.
Puede darse el caso de que un proceso A sea dependiente de otro con menor prioridad
B, en estos casos la prioridad del proceso B tendría que igualar la prioridad del proceso A
ya que un proceso no puede tener menor prioridad que la de los procesos que dependen
de él.