Informe Proyecto

Demostración de los recursos de sistema en la plataforma Android



ELO330 – Programación de Sistemas

08-04-2012


Integrantes:


1 Introducción:

Hoy en día el desarrollo sobre plataformas móviles se ha visto fuertemente impulsado por el avance tecnológico que ha permitido contar un hardware con altas prestaciones. Con ello han surgido nuevos lenguajes de programación para hacer uso de estos recursos, entre ellos se encuentra uno que se sienta sobre las bases de Linux y Java, y que ha entrado con fuerza en el mercado móvil: Android. Es por ello, y enmarcado en los tópicos que abarca esta asignatura, se busca dar a conocer los recursos que ofrece este lenguaje.


2 Resumen:

Android es un lenguaje basado en Linux, que utiliza un compilador cruzado para llevar el código Java a bytecode Android. Es por ello que el desarrollo sobre esta plataforma es escrito en lenguaje Java, y se cuentan con los recursos que éste dispone, más aquellos que incorpora Android. Entre ellos podemos encontrar: creación, transmisión y recepción de datos mediante sockets; creación de hebras; y administración de tareas asincrónicas, entre otros. Y a modo de demostración, se implementará la Tarea 3 de la asignatura en dispositivos con Android.



3 Sobre Android:

3.1 Introducción:

Android es un sistema operativo móvil basado en linux, desarrollado por Open Handset Alliance, el cual es liderada por Google. Las aplicaciones del sistema operativo se ejecutan sobre un framework java de aplicaciones orientadas a objetos sobre el nucleo de bibliotecas de java en una maquina virtual Dalvik con compilación en tiempo de ejecución. Dalvik esta optimizada para el uso de poca memoria y permitir la ejecución de varias maquinas virtuales simultáneamente, delegando al sistema operativo el soporte de aislamiento de procesos, gestión de memoria e hilos.

Las bibliotecas de Android, que están escritas en C, incluyen un administrador de interfaz gráfica y un framework OpenCore, que contiene el manejo de tipos de archivos, protocolos de red, codecs, manipulación de máquinas multimedia, entre otros. También posee una base de datos relacional SQLite, una API gráfica OpenGL, un motor de renderizado WebKit, un motor gráfico SGL, SSL y una biblioteca estándar de C.



3.2 Similitudes y diferencias entre Android y Java:



Primero que todo hay que desmentir el hecho de que Android esta basado y que se ejecuté en Java. Android es un dispositivo basado en Linux, que con compilación cruzada compila de código Java a código de bytes nativo de Android. De esta forma son solo las aplicaciones las desarrolladas en Java, pero al ejecutarse en Android este las compila a su propio lenguaje. Si bien es posible tener Java VM para un teléfono con Android, una aplicación creada con el SDK de Android no se ejecuta en Java cuando se ejecuta en el dispositivo.



3.2.1 Desarrollando una aplicación



Al desarrollar una aplicación para Android nos encontramos con grandes similitudes con realizar una aplicación Java.



Primero al igual que en Java, el método principal de la clase principal deben llamarse igual, pero a diferencia de Java la aplicación Android debe heredar de Activity y no de JFrame.

Ciclo de vida de una actividad, sacado de

http://developer.android.com/reference/android/app/Activity.html


La clase Activity, es una clase enfocada a lo que el usuario puede hacer, casi todas las actividades interactuan con el usuario, es por esto que la clase Activity crea un interfaz donde se puede colocar la UI desarrollada a través de setContentView(View). La clase Activity posee siete métodos que determinan las acciones de la actividad dependiendo de la situación.


Es por esto que los métodos onCreate() y onPause() estarán presentes en casi todas las subclases de Activity.
La modificación de estos métodos no es obligatoría

4 Recursos de sistemas sobre plataforma Android:


Como se ha visto en el transcurso de la asignatura, existen diversos recursos de sistema que se ponen a disposición del programador para ayudar en el desarrollo de soluciones a problemas y android no es la excepción. A continuación mostramos algunos de estos recursos que fueron utilizados para este proyecto.

4.1 Procesos:

Una aplicación android se ejecuta en su propio proceso de linux por lo que la creación de otro proceso mediante un fork no es posible dentro de la misma. Para el manejo de distintas operaciones se generan hebras las cuales manejas los distintos planos de trabajo, por ejemplo interfaz gráfica, procesamiento de datos, etc.

4.2 AsyncTask:

Esta clase permite el manejo de tareas asíncronas de manera sencilla, principalmente la ejecución de  operaciones en segundo plano y definir los resultados en el thread de interfaz de usuario sin  tener que complicarse manipulando threads y handlers.

4.2.1 Tipos genericos

AsyncTask utiliza tipos genéricos, por lo que resulta necesario definir tres tipos de datos cada vez que necesitemos crear una instancia de esta clase:


4.2.2 Etapas del AsyncTask

Cada vez que una tarea asíncrona se ejecuta, se pasa a través de 4 etapas:

  1. onPreExceute(). Se invoca en el UI thread inmediatamente después de que la tarea es ejecutada. Este paso se utiliza normalmente para configurar la tarea. El ejemplo básico es cuando se muestra una ProgressBar en la interfaz de usuario.

  1. doInBackground(Params…). Se invoca en el subproceso en segundo plano inmediatamente después de que onPreExecute() termina de ejecutarse. Dentro de esta etapa podemos utilizar el método publishProgress(Progress…) para publicar una o más unidades de progreso en el UI thread por la ayuda de la siguiente etapa que es onProgressUpdate(Progress…).

  1. onProgressUpdate(Progress…). Se invoca en el UI thread después de una llamada a publishProgress(Progress…). El momento de la ejecución es indefinido. Este método es utilizado para mostrar cualquier tipo de progreso en la interfaz de usuario mientras la tarea en segundo plano sigue ejecutándose.

  1. onPostExecute(Result…). Se invoca en el UI thread después de que el proceso en segundo plano ha sido terminado. El resultado devuelto por todo el proceso se pasa a este método como parámetro.



4.2.3 Para utilizar AsyncTask



Algunas consideraciones y reglas que debes seguir para utilizar AsyncTask:



Aplicaciones:

A modo de demostración, se implementa la tarea “Recuento en Votaciones Electrónicas Sincrónicas” http://profesores.elo.utfsm.cl/~agv/elo330/2s11/Assignments/T3.html con el objetivo de mostrar estos recursos en dispositivos Android. Para ello se utilizaron tres celulares con este sistema operativo: el primero con la aplicación “Servidor Acumulador”, encargado de recibir y almacenar las votaciones, así como también de entregar las estadísticas de las mismas; en el segundo celular se instala el “Cliente Televisor” que se encarga de enviar las votaciones, las cuales van de 0 a 5; y el último, posee el “Cliente Monitor” que se conecta con el “Servidor Acumulador” para solicitar las estadísticas de las votaciones acumuladas y luego las despliega por pantalla.


- Servidor Acumulador

- Cliente Televisor

- Cliente Monitor



Este trabajo fue desarrollado con el IDE Eclipse, por lo cual, cada una de las aplicaciones antes mencionadas contiene la carpeta con el correspondiente proyecto que debe ser importado al programa.



Anexo:



A continuación algunas páginas de interés para realizar desarrollo en dispositivos Android.



- Para probar las aplicaciones hechas en un dispositivo Android.

1.- Primero se debe declarar la aplicación como “debuggable” o “depuración”.

2.- Debe habilitarse la opción “Depuración de USB” en el dispositivo.

3.- Agregar el dispositivo al sistema operativo para poder ser detectado.



http://developer.android.com/guide/developing/device.html