Entradas populares

viernes, 29 de mayo de 2015

Política de la eliminación de procesos


Cada aplicación Android se ejecuta en su propio proceso. Este proceso se crea cada vez que una aplicación necesita ejecutar parte de su código, y seguirá existiendo hasta que la aplicación finalice o hasta que el sistema necesite utilizar parte de sus recursos para otra aplicación considerada prioritaria. Por ello, es importante saber cómo los componentes de una aplicación en Android (Activity, Broadcast Intent Receiver, Service y Content Provider) determinan e influyen en el ciclo de vida de la aplicación. No usar los componentes correctamente a la hora de construir una aplicación puede significar que el sistema operativo la termine cuando en realidad está haciendo una tarea importante para el usuario.

Android construye una jerarquía donde evalúa la clase de componentes que están ejecutándose y el estado de los mismos. En orden de importancia, serían los siguientes:

1. Procesos en primer plano: aquellos necesarios para lo que el usuario está haciendo en ese momento. Un proceso se encuadra en esa categoría si cumple alguna de las siguientes condiciones:

a. tiene un componente Activity ejecutándose, con la que el usuario está interactuando.
b. tiene un componente Broadcast Intent Receiver ejecutándose.
c. ha lanzado algún otro proceso que tiene un componente Service ejecutándose en el momento.

         Idealmente, sólo debería haber algunos de estos procesos en el sistema, y su eliminación debería darse únicamente en casos extremos en los que la falta de recursos impide siguen ejecutándolos todos.

2. Procesos visibles: aquellos procesos que contienen un componente Activity visible en la pantalla, pero no con el foco de actividad en ese momento.

3. Procesos de servicio: aquellos procesos que tienen un componente Service y que están ejecutándose en background. Aunque no sean visibles directamente al usuario, desempeñan tareas sí percibidas por este.

4. Procesos en segundo plano: procesos con un componente Activity, que no son visibles al usuario. Estos procesos no tienen una importancia directa para el usuario en ese momento.

5. Procesos vacíos: procesos que ya no ejecutan ninguna actividad, pero que se mantienen en memoria para agilizar una posible nueva llamada por parte del usuario.

Según esta jerarquía, Android prioriza los procesos existentes en el sistema y decide cuáles han de ser eliminados, con el fin de liberar recursos y poder lanzar la aplicación requerida.


Ciclo de vida de una aplicación Android

El ciclo de vida de una aplicación Android es bastante diferente al ciclo de vida de una aplicación en otros S.O., como Windows. La mayor diferencia es que, en Android el ciclo de vida es controlado principalmente por el sistema, en lugar de ser controlado directamente por el usuario.
Una aplicación en Android va a estar formada por un conjunto de elementos básicos de interacción con el usuario, conocidos como actividades. Además de varias actividades una aplicación también puede contener servicios. Son las actividades las que realmente controlan el ciclo de vida de las aplicaciones, dado que el usuario no cambia de aplicación, sino de actividad. El sistema va a mantener una pila con las actividades previamente visualizadas, de forma que el usuario va a poder regresar a la actividad anterior pulsando la tecla «retorno».

En la mayoría de los casos, cada aplicación Android corre 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 dé a éstas.
Tipos de procesos
Para decidir qué proceso debe ser liquidado, Android ordena los procesos por importancia:
      1. Foregound Process. Es la aplicación que contiene la actividad que ahora mismo se está mostrando en pantalla (Se ha llamado al método onResume ()). Habrá muy pocos procesos Foreground corriendo a la vez en el sistema y estos procesos solamente se liquidarán si la memoria es tan baja que ni matando al resto de procesos tenemos los recursos necesarios.
        2. Visible process. Es el que contiene una actividad que es visible, pero no en primera fila (se ha llamado al método onPause ()). Por ejemplo, estoy leyendo un email, y hago clic en un enlace http y abre el navegador y me lleva a esa web. En ese momento el navegador sería Foregound Process y el cliente de mail sería un Visible process. Estos procesos son considerados importantes por el sistema operativo y normalmente no se cierran.
         3. Service process. Es un servicio como los de cualquier unix. Estos procesos hacen cosas en segundo plano que normalmente son importantes, el sistema nunca va a liquidar un servicio a menos que sea necesario para mantener vivos todos los Visible y Foreground.
     4. Background process. Es un proceso que contiene una actividad que actualmente no es visible por el usuario, estos procesos no tienen demasiada importancia, puede ser un programa que arranqué hace tiempo y no lo he vuelto a usar, pasa a estar en background. Por eso es importante que cuando nuestra aplicación pase a Background, liberar en la medida de lo posible todos los recursos que podamos.
        5. Empty process. Es un proceso que no alberga nada ya, lo usa Android como cache para cuando se crea un proceso nuevo.

Android puede en cualquier momento pausar, parar, destruir nuestra aplicación según las necesidades del momento y nosotros debemos controlar todos estos eventos para hacer una aplicación robusta.
        OnCreate () Llamado cuando la actividad es llamada por primera vez. Es donde debes 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 () Llamada cuando tu actividad ha sido parada, antes de volver a ser empezada. Siempre viene después un onStart ().
       OnStart () Llamada cuando la actividad está siendo visible por el usuario. Después de ésta, se puede ir al onResume () si la actividad va a ser visible o se puede ir al onStop () si se esconde.
        OnResume () Llamada cuando la actividad va a empezar a interactuar con el usuario, en este punto es el último punto antes de que el usuario ya vea la actividad y pueda empezar a interactuar con ella. Siempre después de un onResume () viene un onPause ().
        OnPause () Llamada cuando el sistema va a empezar una nueva actividad. Ésta necesita parar animaciones, y parar todo lo que esté haciendo. Hay que intentar que esta llamada dure poco tiempo, porque hasta que no se ejecute este método no arranca la siguiente actividad. Después de esta llamada puede venir un onResume () si la actividad vuelve a primer plano o un onStop () si se hace invisible para el usuario.
       OnStop () Llamada cuando la actividad ya no es visible al usuario, porque otra actividad ha pasado a primer plano. Desde Aquí se puede ir al onRestart () si vuelve a primer plano o al onDestroy () si se destruye del todo.
      OnDestroy () Esta es la llamada final a la actividad, después de ésta, es totalmente destruida.



Componentes de una aplicación 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.

Componentes de una aplicación

Existe una serie de elementos clave que resultan imprescindibles para desarrollar aplicaciones en Android.


§  Vista (View    

Las vistas son los elementos que componen la interfaz de usuario de una aplicación: por ejemplo, un botón o una entrada de texto. Todas las vistas van a ser objetos descendientes de la clase View, y por tanto, pueden ser definidas utilizando código Java. Sin embargo, lo habitual será definir las vistas utilizando un fichero XML y dejar que el sistema cree los objetos por nosotros a partir de este fichero. Esta forma de trabajar es muy similar a la definición de una página web utilizando código HTML.


§  Layout

Un layout es un conjunto de vistas agrupadas de una determinada forma. Vamos a disponer de diferentes tipos de layouts para organizar las vistas de forma lineal, en cuadrícula o indicando la posición absoluta de cada vista. Los layouts también son objetos descendientes de la clase View. Igual que las vistas, los layouts pueden ser definidos en código, aunque la forma habitual de definirlos es utilizando código XML.


§  Actividad (Activity)

Una aplicación en Android va a estar formada por un conjunto de elementos básicos de visualización, coloquialmente conocidos como pantallas de la aplicación. En Android cada uno de estos elementos, o pantallas, se conoce como actividad. Su función principal es la creación del interfaz de usuario. Una aplicación suelen necesitar varias actividades para crear el interfaz de usuario. Las diferentes actividades creadas serán independientes entre sí, aunque todas trabajarán para un objetivo común. Toda actividad ha de pertenecer a una clase descendiente de Activity.


§  Servicio (Service)

Un servicio es un proceso que se ejecuta “detrás”, sin la necesidad de una interacción con el usuario. Es algo parecido a un demonio en Unix o a un servicio en Windows. En Android disponemos de dos tipos de servicios: servicios locales, que son ejecutados en el mismo proceso y servicios remotos, que son ejecutados en procesos separados.

§  Intención (Intent)

Una intención representa la voluntad de realizar alguna acción; como realizar una llamada de teléfono, visualizar una página web. Se utiliza cada vez que queramos:


Ø Lanzar una actividad

Ø Lanzar un servicio

Ø Enviar un anuncio de tipo broadcast

Ø Comunicarnos con un servicio

Ø Los componentes lanzados pueden ser internos o externos a nuestra aplicación. También utilizaremos las intenciones para el intercambio de información entre estos componentes.


§  Fragment

La llegada de las tabletas trajo el problema de que las aplicaciones de Android ahora deben soportar pantallas más grandes. Si diseñamos una aplicación pensada para un dispositivo móvil y luego la ejecutamos en una tableta, el resultado no suele resultar satisfactorio.

Para ayudar al diseñador a resolver este problema, en la versión 3.0 de Android aparecen los fragments. Un fragment está formado por la unión de varias vistas para crear un bloque funcional de la interfaz de usuario. Una vez creados los fragments, podemos combinar uno o varios fragments dentro de una actividad, según el tamaño de pantalla disponible.

El uso de fragments puede ser algo complejo, por lo que recomendamos dominar primero conceptos como actividadvista y layout antes de abordar su aprendizaje. No obstante, es un concepto importante en Android y todo programador en esta plataforma ha de saber utilizarlos.


§  Receptor de anuncios (Broadcast receiver)

Un receptor de anuncios recibe y reacciona ante anuncios de tipo broadcast.  Los anuncios broadcast pueden ser originados por el sistema o por las aplicaciones.  Algunos tipos de anuncios originados por el sistema son: Batería baja, llamada entrante,... Las aplicaciones también pueden crear y lanzar nuevos tipos de anuncios broadcast. Los receptores de anuncios no disponen de interfaz de usuario, aunque pueden iniciar una actividad si lo estiman oportuno. 


§  Proveedores de Contenido (Content Provider)

En muchas ocasiones las aplicaciones instaladas en un terminal Android necesitan compartir información. Android define un mecanismo estándar para que las aplicaciones puedan compartir datos sin necesidad de comprometer la seguridad del sistema de ficheros. Con este mecanismo podremos acceder a datos de otras aplicaciones, como la lista de contactos, o proporcionar datos a otras aplicaciones. 

Máquina virtual Dalvik


Dalvik es la máquina virtual usada en los dispositivos Android (DalvikVM), la cual está basada en registro, diseñada y escrita por "Dan Bornstein" y algunos otros ingenieros de Google, la cual tiene una serie de características que la diferencian de las máquinas virtuales JAVA. Las aplicaciones Android están hechas en el lenguaje de programación java, pero usan un bytecode diferente al resto de aplicaciones creadas con las máquinas virtuales anteriores.


Dalvik VM es un intérprete que sólo ejecuta los archivos ejecutables con formato .dex (Dalvik Executable). Este formato está optimizado para el almacenamiento eficiente de la memoria, lo cual consigue delegando en el kernel la gestión de hilos (multithreading), de memoria y de procesos. 

Características de Dalvik
         
        :) El bytecode generado, primero es transformado al bytecode de Java y posteriormente se transforma en el usado por Android. Es decir, primero son generados los .class típicos de JAVA, y posteriormente se transforman al tipo de archivo .dex (dalvik executable). Estos archivos dex son comprimidos en los conocidos APK (Android Package).

         :)  Está diseñada para ejecutar varias instancias de la propia máquina simultáneamente.

          :) Optimizada para necesitar poca memoria.

         :) Se basa en registros en vez de en pilas aprovechando así el mejor rendimiento de los móviles con estos.

          :)  Está distribuida como software libre, usando la licencia Apache.

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



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.


Android proporciona una biblioteca de C optimizada para acceder a la base de datos SQLite, pero esta biblioteca está encapsulada en un nivel superior del API de Java.


Arquitectura de la plataforma Android


Android es una plataforma para dispositivos móviles que contiene una pila de software donde se incluye un sistema operativo, middleware y aplicaciones básicas para el usuario. 

A continuación se dará una visión global por capas de cuál es la arquitectura empleada en Android. Cada una de estas capas utiliza servicios ofrecidos por las anteriores, y ofrece a su vez los suyos propios a las capas de niveles superiores.


o   Aplicaciones: Este nivel contiene, tanto las incluidas por defecto de Android como aquellas que el usuario vaya añadiendo posteriormente. Todas estas aplicaciones utilizan los servicios, las API y librerías de los niveles anteriores.

o   Framework de Aplicaciones: Representa fundamentalmente el conjunto de herramientas de desarrollo de cualquier aplicación.


Entre las API más importantes ubicadas aquí, se pueden encontrar las siguientes:
         
     Ø  Activity Manager: Conjunto de API que gestiona el ciclo de vida de las aplicaciones en Android.
     Ø  Window Manager: Gestiona las ventanas de las aplicaciones y utiliza la librería Surface Manager.
     Ø  Telephone Manager: Incluye todas las API vinculadas a las funcionalidades propias del teléfono (llamadas, mensajes, etc.). 
     Ø Content Provider: Permite a cualquier aplicación compartir sus datos con las demás aplicaciones de Android.
     ØView System: Proporciona un gran número de elementos para poder construir interfaces de usuario (GUI. Incluye también algunas vistas estándar para las funcionalidades más frecuentes.
     Ø Location Manager: Posibilita a las aplicaciones la obtención de información de localización y posicionamiento.
     Ø Notification Manager: Mediante el cual las aplicaciones, usando un mismo formato, comunican al usuario eventos que ocurran durante su ejecución. Si llevan asociada alguna acción, en Android denominada Intent, (por ejemplo, atender una llamada recibida) ésta se activa mediante un simple clic.
     ØXMPP Service: Colección de API para utilizar este protocolo de intercambio de mensajes basado en XML.


 o   LibreríasLa siguiente capa se corresponde con las librerías utilizadas por Android. Éstas han sido escritas utilizando C/C++ y proporcionan a Android la mayor parte de sus capacidades más características.


Entre las librerías más importantes ubicadas aquí, se pueden encontrar las siguientes:

     v  Librería libc: Incluye todas las cabeceras y funciones según el estándar del lenguaje C. Librería Surface Manager: Es la encargada de componer los diferentes elementos de navegación de pantalla. Gestiona también las ventanas pertenecientes a las distintas aplicaciones activas en cada momento.
     v    OpenGL/SL y SGL: Representan las librerías gráficas y, por tanto, sustentan la capacidad gráfica de Android. OpenGL/SL maneja gráficos en 3D y permite utilizar, en caso de que esté disponible en el propio dispositivo móvil, el hardware encargado de proporcionar gráficos 3D. Por otro lado, SGL proporciona gráficos en 2D, por lo que será la librería más habitualmente utilizada por la mayoría de las aplicaciones. Una característica importante de la capacidad gráfica de Android es que es posible desarrollar aplicaciones que combinen gráficos en 3D y 2D.
     v    Librería Media Libraries: Proporciona todos los códecs necesarios para el contenido multimedia soportado en Android (vídeo, audio, imágenes estáticas y animadas, etc.)
     v    FreeType: Permite trabajar de forma rápida  y sencilla con distintos tipos de fuentes.
     v   Librería SSL: Posibilita la utilización de dicho protocolo para establecer comunicaciones seguras.
     v    Librería SQLite: Creación y gestión de bases de datos relacionales. 
     v    Librería WebKit: Proporciona un motor para las aplicaciones de tipo navegador y forma el núcleo del actual navegador incluido por defecto en la plataforma Android.

o   Tiempo de ejecución de Android: Al mismo nivel que las librerías de Android se sitúa el entorno de ejecución. Éste lo constituyen las Core Libraries, que son librerías con multitud de clases Java y la máquina virtual Dalvik.

o   Núcleo Linux: Android utiliza el núcleo de Linux 2.6 como una capa de abstracción para el hardware disponible en los dispositivos móviles. Esta capa contiene los drivers necesarios para que cualquier componente hardware pueda ser utilizado mediante las llamadas correspondientes. 


viernes, 22 de mayo de 2015

SISTEMAS OPERATIVOS.

SISTEMAS OPERATIVOS.

Un sistema operativo es un software que actúa de interfaz entre los dispositivos de hardware y los programas usados por el usuario, y su función es gestionar, coordinar las actividades y llevar acabo el intercambio de los recursos.
En función de nuestras intenciones con el teléfono, tenemos una amplia gama de sistemas operativos para elegir, Android, BlackBerry, IPhone OS, Symbian, Palm o Windows Mobile.
Android.
Es un sistema operativo basado en el núcleo de Linux que permite controlar por medio de bibliotecas desarrolladas o adoptadas por Google mediante el lenguaje de programación Java. Las principales características de Android son:
  •       Framework de aplicaciones: permite el reemplazo y la reutilización de los componentes.
  •       Navegador integrado: basado en el motor open SourceWebkit.
  •       SQLite: base de datos para almacenamiento estructurado que se integra directamente con las aplicaciones.
  •       Multimedia: Soporte para medios con formatos comunes de audio, video e imágenes planas.
  •       Máquina Virtual Dalvik: base de llamadas de instancias muy similar a Java.
  •       Telefonía GSM: dependiente del terminal.


BlackBerry.
Este sistema operativo escrito en Java se remonta a la aparición de los primeros handheld en 199. Estos dispositivos permiten el acceso a correo electrónico, navegación web y sincronización con programas como Microsoft Exchange o Lotus, Notes aparte de poder hacer las funciones usuales de un teléfono móvil. El SO BlackBerry está claramente orientado a su uso profesional como gestor de correo electrónico y agenda. La principal ventaja de los sistemas BlackBerry es que permiten acceso en tiempo real al correo electrónico.



Symbian.

Las aplicaciones compatibles con Symbian se desarrollan a partir de lenguajes de programación orientado a objetos como C++, Java, Visual Basic para dispositivos móviles entre otros, incluyendo algunos lenguajes disponibles en versión libre.


IPhone.
Basado en una versión reducida de MAC Os. Su principal característica es la rapidez, tanto del menú como de sus aplicaciones e internet, ausencia de virus y troyanos en nuestro dispositivo móvil y capacidad para multitud de distintas aplicaciones, eso sí, firmadas por Apple. Entre sus ventajas nos encontramos con aplicaciones capadas por Apple e imposibilidad de utilizarlas a no ser que hackeemos el teléfono.


Android
Es una plataforma de software para dispositivos móviles que incluye un sistema operativo y aplicaciones de base.
Android es una plataforma de código abierto para dispositivos móviles que está basado en Linux y desarrollado por Open Handset Alliance, compañias poderosas cmo LG, Motorola y HTC ya han diseñado prototipos que incorporaron el SO Android.
CARACTERÍSTICAS:
Framework de aplicaciones: Habilitando para la reutilización y el reemplazo de componentes.

  • La máquina virtual Dalvik. OPtimizada para dispositivos móviles.
  • Navegador integrado. Basado en el motor del proyecto abierto Web Kit.
  • Gráficos optimizados. Suministrados por una librería de gráficos 2D. Los gráficos 3D están basados en la especificación Open GL es 1.0, con soporte para aceleración gráfica por hardware (opcional).