05 março 2007

Introdução a programação para celulares com suporte a Java ME - parte 2

Este post faz parte de uma série de artigos técnicos sobre o desenvolvimento de software para celulares. No primeiro artigo, abordamos os conceitos básicos da tecnologia Java ME, enfatizando os fundamentos de sua arquitetura. Neste segundo artigo, demonstrarei um exemplo de código Java que ilustra o ciclo de vida de um aplicativo com Java ME.

Introdução
O objetivo é demonstrar um exemplo ilustrativo de uma aplicação Java ME para situar o leitor no que se refere ao processo de execução da aplicação na memória, da organização e estrutura do programa, tais como: o começo, o meio e o fim do ciclo de vida do software.

Uma aplicação Java ME precisa obedecer algumas regras para que funcione corretamente, entre elas, destacarei inicialmente o ponto de entrada, ou seja, por onde o programa começa a ser executado. Na tecnologia Java SE, por exemplo, os programas começam a execução através do método public static void main(String[] args). No entanto, em Java ME isso é diferente e não precisamos codificar esse método, pois uma aplicação que roda em conjunto com a Máquina Virtual Java (JVM do inglês), chamada de Gerenciador da Aplicação (do inglês Application Management Software - AMS), gerencia o ciclo de vida do software através de estados. A figura 1 ilustra esse processo:

Figure 1: Os possíveis estados de um MIDlet e a transição entre ele

Em outras palavras, quando minha aplicação for iniciada ela assumirá um estado Active (algo como iniciado ou rodando). O nome do método é “protected abstract void startApp()”. Quando for fechada, seja pelo usuário ou pelo Sistema Operacional (SO), nossa aplicação será finalizada – neste caso o estado que será tratado chama-se Destroyed. Isso através do método “protected abstract void destroyApp(boolean unconditional)”. Se ocorrer alguma interrupção na execução corrente de nossa aplicação, ela assumirá o estado parado – Paused. Podendo ser tratada pelo método “protected abstract void pauseApp()”. Neste último, posso citar alguns exemplos: o celular recebendo uma ligação ou recebendo uma mensagem SMS; ou ainda, descarregando a bateria do celular; algum evento sendo priorizado pelo SO do celular, tal como um aviso do despertador ou aviso programado. Em todos os estados utilizam-se os métodos citados para tratar as especificidades de nossa aplicação.

Dito isso, vejamos agora outras regras e definições de Java ME. Os métodos comentados acima referem-se as especificações das JSR-37 (MIDP 1.1) e JSR-118 (MIDP-2.0), ou seja, a biblioteca básica a ser implementada para rodar aplicações. Se um celular suporta MIDP então poderá rodar desde que nossa aplicação estenda ou herde da classe chamada MIDlet, provinda de javax.microedition.midlet.MIDlet. O ponto inicial então poderá ser codificado. A figura 2 ilustra um exemplo de código modelo (ou template) que sempre utilizaremos em nossas aplicações.


Figura 2: template da classe MIDlet com os métodos p/ tratamento dos estados

Nossas aplicações serão chamadas de MIDlets, assim como existem os Applet Java.Esse exemplo ainda não possui códigos úteis, mas seve como base para os próximos MIDlets que serão codificados no futuro. Outras definições de MIDlet segundo Wikipédia:

MIDlet É um aplicativo em Java para dispositivos móveis, mais especificamente para a máquina virtual J2ME. Em geral são aplicações para serem executadas em celulares, como jogos entre outros. MIDlets irão (deverão) rodar em qualquer dispositivo que implemente J2ME Mobile Information Device Profile. Como todos os programas em Java, MIDlets são totalmente portáveis sendo feitos para serem executados em qualquer plataforma. Para escrever um MIDlet, pode-se obter o Sun's Wireless Toolkit do site do Java, o qual é disponível para diversas plataformas e é gratuito.

Um MIDlet possui os seguintes requerimentos para ser executado em um telefone celular: Um MIDlet precisa ser empacotado em um arquivo.jar (ex: usando a jar-tool); O arquivo .jar precisa ser pré-verificado.

Fonte: WIKIPÉDIA. Desenvolvido pela Wikimedia Foundation. Apresenta conteúdo enciclopédico. Disponível em: <http://pt.wikipedia.org/w/index.php?title=MIDlet&oldid=1770115>. Acesso em: 5 Mar 2007

Para compilar esses códigos, podemos baixar algum emulador disponível da internet. Esses ambientes facilitarão o processo de compilar, rodar e empacotar nossa aplicação. Como sugestão, baixe o emulador indicado pelo Wikipédia, pois no próximo post iremos precisar de algumas de suas ferramentas. Também sugiro a IDE Eclipse (atual versão 3.2.1 até está data), que poderá ser muito útil para aumentar nossa capacidade de produção.

No próximo post iremos criar alguns programas e testar nos ambientes disponíveis, analisando o código fonte linha a linha, ampliando progressivamente os conhecimentos de Java ME.

5 comentários:

Marcel disse...

Ola Douglas,
muito bom seu artigo..
Só uma pequena dúvida, em questão de IDE p/ desenvolvimento. Vejo que os principais hoje no mercado são o Eclipse / EclipseME e Netbeans Mobility 5.5 . Voce que já tem experiencia nessa área, o que voce comenta sobre prós e contras dessas IDES ou qual é a melhor em desenvolvimento e produtividade? Porque vejo que ECLIPSE ME é muito mais robusta e flexivel, especialmente devido ao Eclipse que o programador vindo já das origens de j2SE , já é acostumado com o ambiente do mesmo.
Já o netbeans tem a vantagem de ser integrado nativamente ne com o WTK (sao da SUN) e tem esse novo GUI BUILDER (estilo o matisse p/ GUI SWING) que vc faz tudo (arrastar e colar) porém nao tem tanta flexibilidade e acho até um pouco mais carregado que o EClipse.
Gostaria de ouvir sua opiniao a respeito dessas IDES e fazer tb sua recomendaçao.
Agradeço e continue ai com seu curso introdutório que está muito bom.

Marcel Caraciolo

Ricardo José Barbosa Cordeiro disse...

muito bom este post, a cada novo post a linguagem java esta empolgante...
mas por que não C para celulares já que mexe direto com memória ???

Ricardo José Barbosa Cordeiro disse...

uma outra dúvida, com o MIDP 2.0 pode-se desenvolver soft para celulares que só aceitam o MIDP 1.1?
e se criar um soft com o MIDP 1.1 e quiser atualizar para o MIDP 2.0 terá que refazer o código ???

Anônimo disse...

Estou gostando do seu tutorial. Se continuar deste modo, parece que haverá grandes dicas sobre J2ME. Estou ansioso sobre os proximos posts.
Obrigado

Anônimo disse...

Achei muito bom o seu post, tem uma introdução perfeita para quem pouco entende do assunto...

Seria muito bom se o Sr pudesse disponibilizar uma apostila no fim!!

Abraços, continue o bom trabalho.