LOS MIDLETSLos MIDlets, aunque ya hemos visto de manera superficial qué son y cómo secrean, son en suma las estructuras qu...
EL GESTOR DE APLICACIONESEl AMS (Aplication Management System), o el gestor de aplicaciones, es elencargado de todos los p...
El AMS gestiona cada una de estas fases de la siguiente manera:   1. Descubrimiento:        El gestor de aplicaciones, rec...
internet, o a través de cable físico, cualquier otra tecnología que nos     permita transferir archivos.2. Instalación:   ...
5. Borrado:         Finalmente, cuando no queremos un MIDlet instalado en el dispositivo,         procedemos a su eliminac...
dichos eventos. Si volvemos a la aplicación, se pasa del estado “Pausa” alestado “Activo”. Ahora, hemos dejado de usar nue...
Si observamos el diagrama, nos damos cuenta que el MIDlet cambia deestados cuando llama a los métodos MIDlet.startApp(), M...
alguna eventualidad, o el usuario lo desee, el MIDlet pasa a un estado de“Pausa”. En este estado, el AMS se encarga de que...
       PUBLIC ABSTRACT CLASS MIDLETCuando ejecutamos un MIDlet, la aplicación debe extender a esta clase, con elpropósito...
    protected abstract        void destroyApp(boolean incondicional)          throws MIDletstateChangeException     Media...
    public final void notifyDestroyed()     Mediante este método le indicamos a la AMS que el MIDlet ha entrado al     es...
llamándose a su método MIDLet.destroyApp() para liberar los recursos     que están ocupados por la aplicación destruída.  ...
Con este método, se le comunica al MIDlet que se ha entrado en el       estado “Activo” y solo puede invocarse cuando la a...
Es una excepción que se lanza en el momento en que ocurre un cambio        en el estado de un MIDlet.                     ...
*/               }        public pauseApp(){               /* En este punto escribimos el código que queremos que ejecute ...
Como un primer ejemplo, haremos una aplicación llamada “HolaMundo”, cuyocódigo se muestra luego de la explicación. Es en e...
pantalla = null;                  formulario = null;                  notifyDestroyed();         }}Y la forma en la que se...
Upcoming SlideShare
Loading in...5
×

Los mi dlets_imprimible

159

Published on

Curso de programacion de disposirivos moviles

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
159
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Los mi dlets_imprimible

  1. 1. LOS MIDLETSLos MIDlets, aunque ya hemos visto de manera superficial qué son y cómo secrean, son en suma las estructuras que crearemos. Es por esto que debemosconocer cuál es la estructura de ellos, sus propiedades fundamentales, cual esel “ciclo de vida” de un MIDlet en un dispositivo móvil, y los estados por los quese desenvuelve el MIDlet en un dispositivo móvil. Como estos son la base delas aplicaciones que se instalan en nuestros dispositivos, debemos conocertambién la estructura y funcionamiento del AMS (o gestor de aplicaciones, vistoen semanas pasadas). En la semana anterior, aprendimos que la configuraciónCLDC posee un paquete propio, llamado javax.microedition. De este paquete,estudiaremos el javax.microedition.midlet, para así estructurar el código denuestra primera aplicación. En los requerimientos para poder ver este curso,se le pide al estudiante conocimientos en JAVA, ya que, en caso del estudianteno saberlo, debe crearse todo un apartado completo en el que se le enseñe alestudiante a programar en JAVA, y luego a introducirse en el contenido deJ2ME. Es por esta razón que se supondrán conocimientos del estudiante enJAVA, y no se harán mayores profundizaciones en conceptos básicos de JAVAcomo clase, método, herencia, etc.Cuando se crea una aplicación usando el perfil MIDP, se crea un MIDlet. EstosMIDlets son pequeñas aplicaciones que están destinadas a correr, como lohabíamos dicho antes, en dispositivos con muy pocas características tantográficas como de memoria y de procesamiento. Y cuando los queremosejecutar en nuestro dispositivo móvil, no contamos con una plataforma en laque copiamos comandos para su ejecución (como el “símbolo del sistema” deWindows), sino que es usado un software adicional para controlar la ejecucióne instalación del MIDlet. Este software ya lo habíamos visto antes, se trata delgestor de aplicaciones y lo estudiaremos con más profundidad a continuación,ya que define el ciclo de vida de nuestra aplicación. 1 Programación de dispositivos móviles Semana 3
  2. 2. EL GESTOR DE APLICACIONESEl AMS (Aplication Management System), o el gestor de aplicaciones, es elencargado de todos los procesos relacionados con los MIDlets. Este softwarelo contienen los propios dispositivos móviles (es un requerimiento para poderestar dentro de la configuración CLDC) y es el que ejecuta, pausa la instalacióno destruye los MIDlets que tengamos instalados en nuestro dispositivo. Esagestión de MIDlets por parte del AMS se puede agrupar en 2 bloquesimportantes, a saber:  Gestión 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 más 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 estadosespecíficos: o Descubrimiento o Instalación o Ejecución o Actualización o BorradoNombraremos nuevamente estos elementos debido a que requerimosrecordarlos por los temas que se verán en esta unidad 2 Programación de dispositivos móviles Semana 3
  3. 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 comunicación WAP, y es el encargado de detectar la aplicación a descargar. La dirección 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 opción 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 través de conexión a 3 Programación de dispositivos móviles Semana 3
  4. 4. internet, o a través de cable físico, cualquier otra tecnología que nos permita transferir archivos.2. Instalación: En el momento en que termina la descarga del MIDlet en el dispositivo, procedemos a instalarlo. Toda la información o cualquier problema que surja en este proceso, debe ser informado al usuario en la ventana del dispositivo móvil. Se dice que el MIDlet está instalado en el dispositivo de manera correcta cuando todas sus clases, sus archivos y elementos adicionales están preparados y listos para ser usados.3. Ejecución: El AMS nos permite, así como el control de la instalación del MIDlet, la ejecución del mismo. Recordemos que los MIDlets se deben ejecutar en una SandBox por seguridad. También 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. Actualización: Si tenemos en nuestro dispositivo móvil una aplicación cuya versión 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 versión diferente a la que se pretende instalar. Aparte de eso, le debe dar la opción al usuario de escoger si desea en realidad generar la actualización o no. 4 Programación de dispositivos móviles Semana 3
  5. 5. 5. Borrado: Finalmente, cuando no queremos un MIDlet instalado en el dispositivo, procedemos a su eliminación. Esta eliminación también es administrada por el AMS, quien indica el MIDlet a desinstalar, la opción de cancelar la desinstalación, y en caso de éxito, el aviso de haberse realizado, así como también cualquier eventualidad sobre el proceso.Cuando se instala un MIDlet en un dispositivo, el MIDlet no desaparece encaso de que el dispositivo se apague o que se cierre la aplicación. Estapermanece instalada en el dispositivo tanto tiempo como el usuario desee,pues se aloja en una porción de la memoria no volátil del aparato. Es el usuarioel que escoge el momento en que desea que la aplicación desaparezca, y enese momento es que interviene el AMS para ubicarse en el quinto estado delMIDletEstados de un MIDlet en fase de ejecuciónUbiquémonos en la fase 3 del MIDlet, la fase de ejecución. Hemos dicho queen esta fase, el AMS controla los estados de la aplicación. ¿Cuáles estados?Primero, el MIDlet en tiempo de ejecución se carga en la memoria volátil deldispositivo, para ser ejecutado. Este estado es llamado el estado “Activo” delMIDlet. En la memoria del dispositivo es donde se puede hacer la transición deestados. Digamos que estamos ejecutando nuestro MIDlet, y nos llega unmensaje o una llamada. Estos elementos son prioritarios para el usuario, por loque el usuario procederá a contestar la llamada. ¿Qué pasa entonces con elMIDlet que está siendo ejecutado? Es transferido a otro estado funcional, elestado “Pausa”. Esto significa que el AMS debe tener la posibilidad dereaccionar ante eventos externos y cambiar el estado del MIDlet respecto a 5 Programación de dispositivos móviles Semana 3
  6. 6. dichos eventos. Si volvemos a la aplicación, se pasa del estado “Pausa” alestado “Activo”. Ahora, hemos dejado de usar nuestro MIDlet y deseamoscerrarlo, ¿Qué hacemos? Procedemos a cerrarlo. En este caso, el AMS pasadel estado “Activo” al estado “destruido”. El estado “Destruido” en ningúnmomento significa que se borre la aplicación, sino que, como dijimos antes, elMIDlet está cargado en memoria volátil para poder funcionar. Lo que hacemoses liberar el espacio de memoria que está usando el MIDlet para que lo useotra aplicación o para que quede libre. La aplicación como tal permanecetodavía en la memoria no volátil 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 encuentramontado en memoria, pasa por 3 estados diferentes:  Activo: El MIDlet se encuentra en fase de ejecución.  Pausa: El MIDlet no se encuentra en ejecución, pero se encuentra todavía montado en memoria. En este caso, el MIDlet no puede usar ningún recurso compartido, ya que para hacerlo, debe estar en modo activo.  Destruido: El MIDlet ya no se encuentra en ejecución 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 transición en la fase 3 de un MIDlet típico, con susrespectivos métodos. 6 Programación de dispositivos móviles Semana 3
  7. 7. Si observamos el diagrama, nos damos cuenta que el MIDlet cambia deestados cuando llama a los métodos MIDlet.startApp(), MIDlet.pauseApp() yMIDlet.destroyApp(). El gestor de aplicaciones hace uso entonces de lasllamadas a cualquiera de estos métodos para cambiar el estado del MIDlet enel momento en que se requiera, o cuando exista un evento externo. De lamisma manera, un MIDlet puede cambiar su estado por sí mismo.Cuando un MIDlet es ejecutado normalmente, pasa por una serie de estadostípicos, como una especie de recorrido normal, en el que el AMS tiene muchoque ver. Lo primero que se hace es que se hace una llamada al constructor delMIDlet, el cual pasa a un estado de “Pausa” por un pequeño momento. En esemomento, el AMS se prepara para el alojo del MIDlet creándole una instancia.Cuando la instancia está lista, el dispositivo se encuentra listo para ejecutar elMIDlet, por lo que el AMS invoca al método MIDlet.startApp(), poniendo laaplicación en estado activo. Cuando se encuentra en estado activo, el MIDletusa todos los recursos que necesita para ser ejecutado, y permanece así porun periodo de tiempo que depende del usuario, de un evento externo, o de unevento interno que lo fuerce a cambiar de estado. En caso de que ocurra 7 Programación de dispositivos móviles Semana 3
  8. 8. 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 lamenor cantidad de memoria posible. Mientras la aplicación permanezca enestado “Activo” o “Pausa”, puede pasar en cualquier momento al estado“Destruído”, ya sea porque el usuario lo cerró, o porque se invoca unaaplicación más prioritaria que necesita los recursos que está consumiendo elMIDlet. Es entonces cuando el AMS genera una llamada al métodoMIDlet.destroyApp(), liberando todos los recursos usados por la aplicación paradisponerlos a otros usos EL PAQUETE JAVAX.MICROEDITION.MIDLETEl paquete javax.microedition.midlet es el encargado de definir las aplicacionesMIDP y la forma en que estas se comportan con respecto al entorno en que seejecutan. Toda aplicación creada usando la configuración MIDP es un MIDlet,como lo anotamos anteriormente. La clases que trae este paquete sonesencialmente 2, y se observan en la siguiente tabla:Cada una de esas clases posee sus propios métodos. Conozcámoslos parasaber cuáles son nuestras herramientas al montar MIDlets.Clase MIDletLa clase midlet se nombra de la siguiente manera: 8 Programación de dispositivos móviles Semana 3
  9. 9.  PUBLIC ABSTRACT CLASS MIDLETCuando ejecutamos un MIDlet, la aplicación debe extender a esta clase, con elpropósito de que el AMS pueda gestionar los estados de la aplicación y puedaacceder a las propiedades de la misma. También se la del caso en que elMIDlet pueda realizar cambios de estado, si invoca los métodos apropiadospara ello. Los métodos que posee esta primera clase se pueden ver acontinuación:  protected MIDlet() Este método es un constructor de clases sin argumentos. En caso de que la llamada a este constructor falle, se lanza la excepción SecurityException.  public final int checkPermission(String permiso) Los permisos poseen estados. Estos estados pueden ser consultados con este método, que se encuentra descrito en el atributo MIDlet- permission, escrito en el archivo JAD. Si el permiso por el que se pregunta su estado no existe, el método devuelve un 0, pero si el estado del permiso no se puede conocer porque de alguna manera el usuario debe generar alguna acción, el método devuelve un -1. Los 3 estados que puede tener este método son: • 1 Si el permiso es permitido • 0 si el permiso es denegado • -1 si el permiso es desconocido. 9 Programación de dispositivos móviles Semana 3
  10. 10.  protected abstract void destroyApp(boolean incondicional) throws MIDletstateChangeException Mediante este método, se indica la terminación 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 volátil. Este método 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 excepción 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 método.  public final String getAppProperty(String key) Recordemos que los MIDlets tienen propiedades en sus archivos .JAD y manifest. Este método me permite recopilar de ellos el valor de una propiedad determinada, que se escribe en el parámetro “key”. El método 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 aplicación lanza la excepción NullPointerException10 Programación de dispositivos móviles Semana 3
  11. 11.  public final void notifyDestroyed() Mediante este método le indicamos a la AMS que el MIDlet ha entrado al estado “Destruido”. Cuando se invoca este método, todos los recursos ocupados por el MIDlet son liberados por este, de la misma manera que si se invocara el método MIDletdestroyApp (). Con este método, el AMS considera que todos los recursos que antes ocupaba el MIDlet han sido liberados y están disponibles.  public final void notifyPaused() Con este método se le indica al AMS que la aplicación no desea estar activa, y que ha entrado en el estado de “Pausa”. Este método no puede ser invocado en el estado “Pause”, sino que solo puede ser invocado desde el estado “Activo”. Cuando se invoca este método, para volver al estado activo, se llama al método MIDlet.startApp(), o para ser destruido se usa el método MIDlet.destroyApp(). Si es el programa el que se para por sí mismo, se requiere llamar al método MIDlet.resumeRequest() para poder volver al estado de actividad  protected abstract void pauseApp() A través de este método, el MIDlet entra en estado de “Pausa”. Al igual que en el método anterior, solo puede ser llamado cuando el MIDlet está activo. En caso de que ocurra un error en tiempo de ejecución, una excepción RuntimeException mientras se llama el método MIDlet.pauseApp(), el MIDlet pasa a ser destruido inmediatamente,11 Programación de dispositivos móviles Semana 3
  12. 12. llamándose a su método MIDLet.destroyApp() para liberar los recursos que están ocupados por la aplicación destruída.  public final boolean platformRequest(String url) Se establece una conexión directa entre el MIDlet y la dirección url dentro de los paréntesis. Dependiendo del contenido presente en la URL, el dispositivo ejecutará una aplicación determinada que sea capaz de leer el contenido de la URL e interactúe 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 telefónica.  public final void resumeRequest() A través de este método, 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 método, el AMS determina cuales aplicaciones son las encargadas de pasar al estado “Activo” invocando el método MIDlet.starApp()  protected abstract void startApp() throws MIDletstateChangeException12 Programación de dispositivos móviles Semana 3
  13. 13. Con este método, se le comunica al MIDlet que se ha entrado en el estado “Activo” y solo puede invocarse cuando la aplicación se encuentra en estado “Pause”. Si El MIDlet no puede pasar al estado “activo” en ese momento, sino en un estado posterior (una aplicación de mayor prioridad se encuentra ejecutándose), se lanza la excepción MIDletstateChangeException. Estos métodos crean una comunicación entre el MIDlet y el AMS: Mientras los métodos StartApp(), PauseApp() y destroyApp() los usa el AMS para comunicarle información al MIDlet, los métodos, ResumeRequest(), NotifyPaused() y NotifyDestroyed() son usados por el MIDlet para comunicarse con el AMS. En la siguiente tabla se ve el resumen de los métodos contenidos en la clase MIDletClase MIDletChangeStateException  public class MIDletstateChangeException extends Exception 13 Programación de dispositivos móviles Semana 3
  14. 14. Es una excepción que se lanza en el momento en que ocurre un cambio en el estado de un MIDlet. ESTRUCTURA DE LOS MIDLETSEn este momento, ya sabemos los estados de un MIDlet, su estructura, ciclo devida, clases, métodos y acciones. Es hora de ver el elemento final del curso,cuyo objetivo es poder montar una aplicación en un dispositivo móvil, es decir,veremos la estructura de un código que contiene un dispositivo móvilUn MIDlet, al igual que un applet, carece totalmente de una función main(),como otras aplicaciones de JAVA. Si la contuviera, el gestor de aplicacionesúnicamente la ignoraría y seguiría adelante con el código. En caso de haceruso de la estructura System.exit() se produciría la excepciónSecurityExcepcion.Sabiendo estos elementos básicos, observemos ahora la estructura general deun MIDlet en código de JAVAimport 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 código que queremos que el MIDlet ejecute, es decir, es el core o nucleo de nuestra aplicación. 14 Programación de dispositivos móviles Semana 3
  15. 15. */ } public pauseApp(){ /* En este punto escribimos el código que queremos que ejecute el MIDlet cuando entre en estado de pausa. Este punto es opcional */ } public destroyApp(){ /* En este punto copiamos el código que queremos que el MIDlet ejecute cuando sea destruido. Generalmente acá liberamos espacios de memoria. (Opcional) */ }Estos métodos son obligatorios para cualquier MIDlet a crear. Debemos teneren cuenta que la clase creada debe heredar de la clase MIDlet, y que estaclase tiene 3 métodos abstractos, a saber: startApp(), pauseApp() ydestroyApp() EJEMPLO PRÁCTICOCrearemos ahora nuestro primer MIDlet. Sabiendo la estructura que tienen losrespectivos MIDlets, podemos ver reflejado todo ese conocimiento en nuestraprimera aplicación. Veamos la estructura del mismo, y dejemos el lenguajepara un MIDlet más avanzado. Con este ejemplo tratamos de desarrollar unMIDlet básico que tendrá la estructura de todos aquellos que el aprendizdesarrollará en adelante, con su estudio e investigación. . 15 Programación de dispositivos móviles Semana 3
  16. 16. Como un primer ejemplo, haremos una aplicación llamada “HolaMundo”, cuyocódigo se muestra luego de la explicación. Es en este ejemplo donde vemos laestructura interna del los MIDlets que vimos en el apartado superior. Elconstructor lo usaremos para crear los objetos poseídos por nuestra aplicación,y para crear también la referencia que se relaciona con la pantalla de nuestrodispositivo. En el método startApp() activamos la pantalla de nuestroprograma. En el método pauseApp() estará vacío ya que no haremos uso de él,aunque podríamos usarlo para emitir un mensaje al usuario que le indique quela aplicación está pausada. En el método destroyApp(), liberamos los recursosde memora y notificamos al AMS que el MIDlet ha sido destruido.El código 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 Programación de dispositivos móviles Semana 3
  17. 17. pantalla = null; formulario = null; notifyDestroyed(); }}Y la forma en la que se despliega es la siguiente: 17 Programación de dispositivos móviles Semana 3

×