Está en la página 1de 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,

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

MIDletstateChangeException

12

Programacin de dispositivos mviles


Semana 3

void

startApp()

throws

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

13

public class MIDletstateChangeException extends Exception

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

También podría gustarte