Sei sulla pagina 1di 17

LOS MIDLETS

Los MIDlets, aunque ya hemos visto de manera superficial qu son y cmo se crean, son en suma las estructuras que crearemos. Es por esto que debemos conocer cul es la estructura de ellos, sus propiedades fundamentales, cual es el ciclo de vida de un MIDlet en un dispositivo mvil, y los estados por los que se desenvuelve el MIDlet en un dispositivo mvil. Como estos son la base de las aplicaciones que se instalan en nuestros dispositivos, debemos conocer tambin la estructura y funcionamiento del AMS (o gestor de aplicaciones, visto en semanas pasadas). En la semana anterior, aprendimos que la configuracin CLDC posee un paquete propio, llamado javax.microedition. De este paquete, estudiaremos el javax.microedition.midlet, para as estructurar el cdigo de nuestra primera aplicacin. En los requerimientos para poder ver este curso, se le pide al estudiante conocimientos en JAVA, ya que, en caso del estudiante no saberlo, debe crearse todo un apartado completo en el que se le ensee al estudiante a programar en JAVA, y luego a introducirse en el contenido de J2ME. Es por esta razn que se supondrn conocimientos del estudiante en JAVA, y no se harn mayores profundizaciones en conceptos bsicos de JAVA como clase, mtodo, herencia, etc.

Cuando se crea una aplicacin usando el perfil MIDP, se crea un MIDlet. Estos MIDlets son pequeas aplicaciones que estn destinadas a correr, como lo habamos dicho antes, en dispositivos con muy pocas caractersticas tanto grficas como de memoria y de procesamiento. Y cuando los queremos ejecutar en nuestro dispositivo mvil, no contamos con una plataforma en la que copiamos comandos para su ejecucin (como el smbolo del sistema de Windows), sino que es usado un software adicional para controlar la ejecucin e instalacin del MIDlet. Este software ya lo habamos visto antes, se trata del gestor de aplicaciones y lo estudiaremos con ms profundidad a continuacin, ya que define el ciclo de vida de nuestra aplicacin.

Programacin de dispositivos mviles Semana 3

EL GESTOR DE APLICACIONES

El AMS (Aplication Management System), o el gestor de aplicaciones, es el encargado de todos los procesos relacionados con los MIDlets. Este software lo contienen los propios dispositivos mviles (es un requerimiento para poder estar dentro de la configuracin CLDC) y es el que ejecuta, pausa la instalacin o destruye los MIDlets que tengamos instalados en nuestro dispositivo. Esa gestin de MIDlets por parte del AMS se puede agrupar en 2 bloques importantes, a saber:

Gestin del ciclo de vida del MIDlet Control de los estados por los que pasa el MIDlet cuando est siendo ejecutado por el dispositivo.

Estudiemos con ms detenimiento estos procesos

El ciclo de vida de un MIDlet.

En la unidad 1, vimos el ciclo de vida de un MIDlet, compuesto por 5 estados especficos: o Descubrimiento o Instalacin o Ejecucin o Actualizacin o Borrado

Nombraremos nuevamente estos elementos debido a que requerimos recordarlos por los temas que se vern en esta unidad

Programacin de dispositivos mviles Semana 3

El AMS gestiona cada una de estas fases de la siguiente manera:

1. Descubrimiento:

El gestor de aplicaciones, recordemos, no es un navegador. Nuestro navegador es alguno basado, por ejemplo, en comunicacin WAP, y es el encargado de detectar la aplicacin a descargar. La direccin donde se encuentra el MIDlet se transfiere al AMD, y en ese punto, el gestor nos permite seleccionar las aplicaciones a descargar. Esto significa que el gestor de aplicaciones debe tener una opcin que nos permita visualizar los diversos MIDlets o las diversas aplicaciones que queremos instalar en nuestro dispositivo. Luego de seleccionado el MIDlet, el AMS debe gestionar la descarga del mismo, dependiendo de las capacidades del dispositivo, es decir, podemos descargar a travs de conexin a

Programacin de dispositivos mviles Semana 3

internet, o a travs de cable fsico, cualquier otra tecnologa que nos permita transferir archivos.

2. Instalacin:

En el momento en que termina la descarga del MIDlet en el dispositivo, procedemos a instalarlo. Toda la informacin o cualquier problema que surja en este proceso, debe ser informado al usuario en la ventana del dispositivo mvil. Se dice que el MIDlet est instalado en el dispositivo de manera correcta cuando todas sus clases, sus archivos y elementos adicionales estn preparados y listos para ser usados.

3. Ejecucin:

El AMS nos permite, as como el control de la instalacin del MIDlet, la ejecucin del mismo. Recordemos que los MIDlets se deben ejecutar en una SandBox por seguridad. Tambin podemos anotar en este caso, que el AMS controla los estados del MIDlet mientras se est ejecutando. El estudio de estos estados lo llevaremos a cabo en breve.

4. Actualizacin:

Si tenemos en nuestro dispositivo mvil una aplicacin cuya versin es igual, menor o mayor que la que estamos instalando, el AMS debe ser capaz de detectarlo, y no solo eso, sino informarle al usuario la existencia de una versin diferente a la que se pretende instalar. Aparte de eso, le debe dar la opcin al usuario de escoger si desea en realidad generar la actualizacin o no.

Programacin de dispositivos mviles Semana 3

5. Borrado:

Finalmente, cuando no queremos un MIDlet instalado en el dispositivo, procedemos a su eliminacin. Esta eliminacin tambin es administrada por el AMS, quien indica el MIDlet a desinstalar, la opcin de cancelar la desinstalacin, y en caso de xito, el aviso de haberse realizado, as como tambin cualquier eventualidad sobre el proceso.

Cuando se instala un MIDlet en un dispositivo, el MIDlet no desaparece en caso de que el dispositivo se apague o que se cierre la aplicacin. Esta permanece instalada en el dispositivo tanto tiempo como el usuario desee, pues se aloja en una porcin de la memoria no voltil del aparato. Es el usuario el que escoge el momento en que desea que la aplicacin desaparezca, y en ese momento es que interviene el AMS para ubicarse en el quinto estado del MIDlet

Estados de un MIDlet en fase de ejecucin

Ubiqumonos en la fase 3 del MIDlet, la fase de ejecucin. Hemos dicho que en esta fase, el AMS controla los estados de la aplicacin. Cules estados? Primero, el MIDlet en tiempo de ejecucin se carga en la memoria voltil del dispositivo, para ser ejecutado. Este estado es llamado el estado Activo del MIDlet. En la memoria del dispositivo es donde se puede hacer la transicin de estados. Digamos que estamos ejecutando nuestro MIDlet, y nos llega un mensaje o una llamada. Estos elementos son prioritarios para el usuario, por lo que el usuario proceder a contestar la llamada. Qu pasa entonces con el MIDlet que est siendo ejecutado? Es transferido a otro estado funcional, el estado Pausa. Esto significa que el AMS debe tener la posibilidad de reaccionar ante eventos externos y cambiar el estado del MIDlet respecto a

Programacin de dispositivos mviles Semana 3

dichos eventos. Si volvemos a la aplicacin, se pasa del estado Pausa al estado Activo. Ahora, hemos dejado de usar nuestro MIDlet y deseamos cerrarlo, Qu hacemos? Procedemos a cerrarlo. En este caso, el AMS pasa del estado Activo al estado destruido. El estado Destruido en ningn momento significa que se borre la aplicacin, sino que, como dijimos antes, el MIDlet est cargado en memoria voltil para poder funcionar. Lo que hacemos es liberar el espacio de memoria que est usando el MIDlet para que lo use otra aplicacin o para que quede libre. La aplicacin como tal permanece todava en la memoria no voltil y puede ser invocada en cualquier momento, es decir, puede ser puesta en estado activo en cualquier momento.

Recapitulando entonces, un MIDlet en la fase 3, y cuando se encuentra montado en memoria, pasa por 3 estados diferentes:

Activo: El MIDlet se encuentra en fase de ejecucin. Pausa: El MIDlet no se encuentra en ejecucin, pero se encuentra todava montado en memoria. En este caso, el MIDlet no puede usar ningn recurso compartido, ya que para hacerlo, debe estar en modo activo.

Destruido: El MIDlet ya no se encuentra en ejecucin y se libera la memoria que est usando. Se debe anotar que este es el estado final de un MIDlet, y que de ac no puede transitar a otros estados.

Podemos ver los estados de transicin en la fase 3 de un MIDlet tpico, con sus respectivos mtodos.

Programacin de dispositivos mviles Semana 3

Si observamos el diagrama, nos damos cuenta que el MIDlet cambia de estados cuando llama a los mtodos MIDlet.startApp(), MIDlet.pauseApp() y MIDlet.destroyApp(). El gestor de aplicaciones hace uso entonces de las llamadas a cualquiera de estos mtodos para cambiar el estado del MIDlet en el momento en que se requiera, o cuando exista un evento externo. De la misma manera, un MIDlet puede cambiar su estado por s mismo.

Cuando un MIDlet es ejecutado normalmente, pasa por una serie de estados tpicos, como una especie de recorrido normal, en el que el AMS tiene mucho que ver. Lo primero que se hace es que se hace una llamada al constructor del MIDlet, el cual pasa a un estado de Pausa por un pequeo momento. En ese momento, el AMS se prepara para el alojo del MIDlet crendole una instancia. Cuando la instancia est lista, el dispositivo se encuentra listo para ejecutar el MIDlet, por lo que el AMS invoca al mtodo MIDlet.startApp(), poniendo la aplicacin en estado activo. Cuando se encuentra en estado activo, el MIDlet usa todos los recursos que necesita para ser ejecutado, y permanece as por un periodo de tiempo que depende del usuario, de un evento externo, o de un evento interno que lo fuerce a cambiar de estado. En caso de que ocurra

Programacin de dispositivos mviles Semana 3

alguna eventualidad, o el usuario lo desee, el MIDlet pasa a un estado de Pausa. En este estado, el AMS se encarga de que el MIDlet consuma la menor cantidad de memoria posible. Mientras la aplicacin permanezca en estado Activo o Pausa, puede pasar en cualquier momento al estado Destrudo, ya sea porque el usuario lo cerr, o porque se invoca una aplicacin ms prioritaria que necesita los recursos que est consumiendo el MIDlet. Es entonces cuando el AMS genera una llamada al mtodo MIDlet.destroyApp(), liberando todos los recursos usados por la aplicacin para disponerlos a otros usos

EL PAQUETE JAVAX.MICROEDITION.MIDLET

El paquete javax.microedition.midlet es el encargado de definir las aplicaciones MIDP y la forma en que estas se comportan con respecto al entorno en que se ejecutan. Toda aplicacin creada usando la configuracin MIDP es un MIDlet, como lo anotamos anteriormente. La clases que trae este paquete son esencialmente 2, y se observan en la siguiente tabla:

Cada una de esas clases posee sus propios mtodos. Conozcmoslos para saber cules son nuestras herramientas al montar MIDlets.

Clase MIDlet

La clase midlet se nombra de la siguiente manera:

Programacin de dispositivos mviles Semana 3

PUBLIC ABSTRACT CLASS MIDLET

Cuando ejecutamos un MIDlet, la aplicacin debe extender a esta clase, con el propsito de que el AMS pueda gestionar los estados de la aplicacin y pueda acceder a las propiedades de la misma. Tambin se la del caso en que el MIDlet pueda realizar cambios de estado, si invoca los mtodos apropiados para ello. Los mtodos que posee esta primera clase se pueden ver a continuacin:

protected MIDlet()

Este mtodo es un constructor de clases sin argumentos. En caso de que la llamada a este constructor falle, se lanza la excepcin SecurityException.

public final int checkPermission(String permiso)

Los permisos poseen estados. Estos estados pueden ser consultados con este mtodo, que se encuentra descrito en el atributo MIDletpermission, escrito en el archivo JAD. Si el permiso por el que se pregunta su estado no existe, el mtodo devuelve un 0, pero si el estado del permiso no se puede conocer porque de alguna manera el usuario debe generar alguna accin, el mtodo devuelve un -1. Los 3 estados que puede tener este mtodo son:

1 Si el permiso es permitido 0 si el permiso es denegado -1 si el permiso es desconocido.

Programacin de dispositivos mviles Semana 3

protected abstract

void destroyApp(boolean incondicional)

throws MIDletstateChangeException

Mediante este mtodo, se indica la terminacin del MIDlet, es decir, su traspaso al estado destruido. Recordemos que en este estado el MIDlet debe liberar todos los recursos que est usando, y

adicionalmente, debe salvar cualquier dato que sea necesario guardar en la memoria no voltil. Este mtodo solo puede ser llamado desde el estado Activo o desde el estado Pausa.

Vemos que existe una variable booleana como incondicional. Si esta booleana es false, el MIDlet tiene la posibilidad de lanzar la excepcin MIDletstateChangeException, con el objetivo de indicar la imposibilidad de destruir el MIDlet en dicho momento. Si es true, el MIDlet asume su estado como destruido sin importar la forma en la que finalice el mtodo.

public final String getAppProperty(String key)

Recordemos que los MIDlets tienen propiedades en sus archivos .JAD y manifest. Este mtodo me permite recopilar de ellos el valor de una propiedad determinada, que se escribe en el parmetro key. El mtodo tiene como respuesta una string con la propiedad escrita en key, pero en caso de que la propiedad como tal no exista, devuelve un Null. Si key es null, la aplicacin lanza la excepcin NullPointerException

10

Programacin de dispositivos mviles Semana 3

public final void notifyDestroyed()

Mediante este mtodo le indicamos a la AMS que el MIDlet ha entrado al estado Destruido. Cuando se invoca este mtodo, todos los recursos ocupados por el MIDlet son liberados por este, de la misma manera que si se invocara el mtodo MIDletdestroyApp (). Con este mtodo, el AMS considera que todos los recursos que antes ocupaba el MIDlet han sido liberados y estn disponibles.

public final void notifyPaused()

Con este mtodo se le indica al AMS que la aplicacin no desea estar activa, y que ha entrado en el estado de Pausa. Este mtodo no puede ser invocado en el estado Pause, sino que solo puede ser invocado desde el estado Activo. Cuando se invoca este mtodo, para volver al estado activo, se llama al mtodo MIDlet.startApp(), o para ser destruido se usa el mtodo MIDlet.destroyApp(). Si es el programa el que se para por s mismo, se requiere llamar al mtodo MIDlet.resumeRequest() para poder volver al estado de actividad

protected abstract void pauseApp()

A travs de este mtodo, el MIDlet entra en estado de Pausa. Al igual que en el mtodo anterior, solo puede ser llamado cuando el MIDlet est activo. En caso de que ocurra un error en tiempo de ejecucin, una excepcin RuntimeException mientras se llama el mtodo

MIDlet.pauseApp(), el MIDlet pasa a ser destruido inmediatamente,

11

Programacin de dispositivos mviles Semana 3

llamndose a su mtodo MIDLet.destroyApp() para liberar los recursos que estn ocupados por la aplicacin destruda.

public final boolean platformRequest(String url)

Se establece una conexin directa entre el MIDlet

y la direccin url

dentro de los parntesis. Dependiendo del contenido presente en la URL, el dispositivo ejecutar una aplicacin determinada que sea capaz de leer el contenido de la URL e interacte con l.

Digamos que, por ejemplo, la URL hace referencia a un archivo .JAR y .JAD. En este caso, el dispositivo entender que debe comenzar una descarga de un MIDlet y comenzar el proceso. Si por ejemplo la URL posee el formato tel<numero>, nuestro dispositivo entiende y genera una llamada telefnica.

public final void resumeRequest()

A travs de este mtodo, el MIDlet le comunica al AMS su deseo de pasar al estado Activo. Es el mecaniso mediante el cual el MIDlet se comunica con la AMS indicando su deseo de pasar a Activo. Con este mtodo, el AMS determina cuales aplicaciones son las encargadas de pasar al estado Activo invocando el mtodo MIDlet.starApp()

protected

abstract

void

startApp()

throws

MIDletstateChangeException

12

Programacin de dispositivos mviles Semana 3

Con este mtodo, se le comunica al MIDlet que se ha entrado en el estado Activo y solo puede invocarse cuando la aplicacin se encuentra en estado Pause. Si El MIDlet no puede pasar al estado activo en ese momento, sino en un estado posterior (una aplicacin de mayor prioridad se encuentra ejecutndose), se lanza la excepcin MIDletstateChangeException. Estos mtodos crean una comunicacin entre el MIDlet y el AMS: Mientras los mtodos StartApp(), PauseApp() y destroyApp() los usa el AMS para comunicarle informacin al MIDlet, los mtodos, ResumeRequest(), NotifyPaused() y NotifyDestroyed() son usados por el MIDlet para comunicarse con el AMS.

En la siguiente tabla se ve el resumen de los mtodos contenidos en la clase MIDlet

Clase MIDletChangeStateException

public class MIDletstateChangeException extends Exception

13

Programacin de dispositivos mviles Semana 3

Es una excepcin que se lanza en el momento en que ocurre un cambio en el estado de un MIDlet.

ESTRUCTURA DE LOS MIDLETS

En este momento, ya sabemos los estados de un MIDlet, su estructura, ciclo de vida, clases, mtodos y acciones. Es hora de ver el elemento final del curso, cuyo objetivo es poder montar una aplicacin en un dispositivo mvil, es decir, veremos la estructura de un cdigo que contiene un dispositivo mvil

Un MIDlet, al igual que un applet, carece totalmente de una funcin main(), como otras aplicaciones de JAVA. Si la contuviera, el gestor de aplicaciones nicamente la ignorara y seguira adelante con el cdigo. En caso de hacer uso de la estructura System.exit() se producira la excepcin

SecurityExcepcion.

Sabiendo estos elementos bsicos, observemos ahora la estructura general de un MIDlet en cdigo de JAVA

import javax.microedition.midlet.* public class MiMidlet extends MIDlet public MiMidlet() { /* En este punto construimos nuestra clase e inicializamos nuestras variables */ } public startApp(){ /* En este punto se copia el cdigo que queremos que el MIDlet ejecute, es decir, es el core o nucleo de nuestra aplicacin.

14

Programacin de dispositivos mviles Semana 3

*/ } public pauseApp(){ /* En este punto escribimos el cdigo que queremos que ejecute el MIDlet cuando entre en estado de pausa. Este punto es opcional */ } public destroyApp(){ /* En este punto copiamos el cdigo que queremos que el MIDlet ejecute cuando sea destruido. Generalmente ac liberamos espacios de memoria. (Opcional) */ }

Estos mtodos son obligatorios para cualquier MIDlet a crear. Debemos tener en cuenta que la clase creada debe heredar de la clase MIDlet, y que esta clase tiene 3 mtodos abstractos, a saber: startApp(), pauseApp() y destroyApp()

EJEMPLO PRCTICO

Crearemos ahora nuestro primer MIDlet. Sabiendo la estructura que tienen los respectivos MIDlets, podemos ver reflejado todo ese conocimiento en nuestra primera aplicacin. Veamos la estructura del mismo, y dejemos el lenguaje para un MIDlet ms avanzado. Con este ejemplo tratamos de desarrollar un MIDlet bsico que tendr la estructura de todos aquellos que el aprendiz desarrollar en adelante, con su estudio e investigacin. .

15

Programacin de dispositivos mviles Semana 3

Como un primer ejemplo, haremos una aplicacin llamada HolaMundo, cuyo cdigo se muestra luego de la explicacin. Es en este ejemplo donde vemos la estructura interna del los MIDlets que vimos en el apartado superior. El constructor lo usaremos para crear los objetos posedos por nuestra aplicacin, y para crear tambin la referencia que se relaciona con la pantalla de nuestro dispositivo. En el mtodo startApp() activamos la pantalla de nuestro

programa. En el mtodo pauseApp() estar vaco ya que no haremos uso de l, aunque podramos usarlo para emitir un mensaje al usuario que le indique que la aplicacin est pausada. En el mtodo destroyApp(), liberamos los recursos de memora y notificamos al AMS que el MIDlet ha sido destruido.

El cdigo es el siguiente: } import javax.microedition.midlet.*; import javax.microedition.lcdui.*;

public class HolaMundo extends MIDlet{ private Display pantalla; private Form formulario = null; public HolaMundo(){ pantalla = Display.getDisplay(this); formulario = new Form(Hola Mundo); } public void startApp(){ pantalla.setCurrent(formulario); } public void pauseApp(){ } public void destroyApp(boolean unconditional){

16

Programacin de dispositivos mviles Semana 3

pantalla = null; formulario = null; notifyDestroyed(); } }

Y la forma en la que se despliega es la siguiente:

17

Programacin de dispositivos mviles Semana 3

Potrebbero piacerti anche