Tuesday, November 4, 2008

LA CLASE MIDlet: LA MADRE DE TODOS

Todo desarrollo en J2ME tiene una base, esta base es la clase MIDlet.



Echemosle un vistazo a la documentación de SUN MicroSystems...



"javax.microedition.midlet Class MIDlet
java.lang.Object ---------> javax.microedition.midlet.MIDlet


public abstract class MIDlet extends Object


A MIDlet is a MID Profile application. The application must extend this class to allow the application management software to control the MIDlet and to be able to retrieve properties from the application descriptor and notify and request state changes. The methods of this class allow the application management software to create, start, pause, and destroy a MIDlet. A MIDlet is a set of classes designed to be run and controlled by the application management software via this interface. The states allow the application management software to manage the activities of multiple MIDlets within a runtime environment. It can select which MIDlets are active at a given time by starting and pausing them individually. The application management software maintains the state of the MIDlet and invokes methods on the MIDlet to notify the MIDlet of change states. The MIDlet implements these methods to update its internal activities and resource usage as directed by the application management software. The MIDlet can initiate some state changes itself and notifies the application management software of those state changes by invoking the appropriate methods.
Note: The methods on this interface signal state changes. The state change is not considered complete until the state change method has returned. It is intended that these methods return quickly."



Para todos aquellos que no mastican muy bien el inglés, no se preocupen; lo más importante lo veremos por medio de ejemplos.



La clase MIDlet cuenta con tres métodos protegidos, ésto significa, no pueden faltar, y son los siguientes:

  1. startApp()

  2. pauseApp()

  3. destroyApp(boolean unconditional)
El método startApp() es el dá inicio a todo, es como el public avoid main que veíamos en los códigos de J2SE. el pauseApp() en el caso de tener que interrumpir la ejecución de la aplicación, por ejemplo: Si recibimos una llamada o entra un mensaje a nuestro dispositivo móvil.


El método destroyApp() sería el encargado de dar por terminada la aplicación, desactivándolo y procediendo a su destrucción como proceso activo en memoria.

Para que lo podamos entender mejor, vamos a ver un ejemplo:


MiPrimerMidlet.java

import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MiPrimerMidlet extends MIDlet {
Display Despliegue;
Form Pantalla;
StringItem txtBox;

public MiPrimerMidlet() {
Despliegue = Display.getDisplay(this);
Pantalla = new Form("Primer Midlet");
StringItem txtBox = new StringItem("MI PRIMER MIDLET !!!", null);
Pantalla.append(txtBox);
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}

protected void pauseApp() {
}

protected void startApp() throws MIDletStateChangeException {
Despliegue.setCurrent(Pantalla);
}
}

Analicemos éste código, notemos primero que nada que entre las librerías que estamos importando, hay dos que hacen referencia directa a la clase MIDlet


import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

La primera línea nos permite heredar la clase MIDlet, la segunda nos permite manejar los cambios de estado, esto es: el startApp, pauseApp y el destroyApp que hemos estado mencionando.


Siguiendo con el análisis vemos como nuestra aplicación hereda a la clase MIDlet

public class MiPrimerMidlet extends MIDlet {


Y adicional a ésto manejos tres elementos más: Un Display, una Form y un StringItem.



La clase Display nos dá el poder de controlar la pantalla del dispositivo, la Form nos permite desplegar algo en la pantalla y agregar allí nuestros controles, en este caso: Un letrero que diga MI PRIMER MIDLET !!!



La clase Display toma control de la pantalla del dispositivo con el método getDisplay en la línea

Despliegue = Display.getDisplay(this);

Además de éste método, tiene otros igual de útiles como :

  1. 1.- getBestImageHeight(int imageType)
  2. 2.- getBestImageWidth(int imageType)
  3. 3.- setCurrent(Alert alert, Displayable nextDisplayable)
  4. 4.- setCurrent(Displayable nextDisplayable)

La clase Form nos permite desplegar algo en la pantalla y agregar allí los componentes que deseamos.

Como se puede observar en el ejemplo, declaramos un objeto StringItem (txtBox), le asignamos un letrero que dice MI PRIMER MIDLET !!! y a continuación lo agregamos al objeto Form (Pantalla).

Despliegue = Display.getDisplay(this);

Pantalla = new Form("Primer Midlet");

StringItem txtBox = new StringItem("MI PRIMER MIDLET !!!", null);

Pantalla.append(txtBox);

Y finalmente, asignamos este objeto Form (txtBox) con todo y componente al objeto Despliegue para poder visualizarlo.

Despliegue.setCurrent(Pantalla);

En la siguiente entrega, veremos cómo se compila, cómo se ejecuta y cómo se crean los archivos instalables de J2ME, hoy por hoy hemos terminado.

3 comments:

Anonymous said...

esta muy bueno

joulecd said...

Hola hola, yo comienzo en esto del j2me y me parece muy bueno la explicaion solo tengo una dudilla, no bastaria con un .midlet.* para heredar todos los atributos????

Aldo Rodríguez said...

Hola buen dia

Gracias por el comentario.

Basicamente SI, bastaria con una linea *.midlet.*

Pero es recomendable importar solo lo que usaras, asi no utilizas tanta memoria y dejas algo para lo que se pueda ofrecer.

Nuevamente gracias por comentar, estoy a tus ordenes para mas dudas.

Saludos