Primeiros Passos - Começando com o Java wireless

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Mesmo que você seja um desenvolvedor experiente, entrar nessa onda implica em pensar em questões às quais talvez esteja pouco acostumado.

Esse artigo faz parte da revista Java Magazine edição 18. Clique aqui para ler todos os artigos desta edição

jm18_capa.jpg

Primeiros Passos

Começando com o Java wireless

Hoje fala-se muito o termo wireless, mas este diz pouco sobre como uma aplicação sem-fio realmente deve ser. Independentemente de qual tecnologia estiver sendo utilizada, wireless significa mobilidade. De fato, o grande diferencial de uma solução móvel é permitir que seus usuários obtenham qualquer tipo de informação, em movimento. Especialmente se você mora em uma cidade grande, como São Paulo ou Rio de Janeiro, e está sujeito a encontrar grandes congestionamentos, a vantagem é enorme. A possibilidade de ver a situação de vendas ou o status dos servidores, de responder um e-mail urgente vindo do outro lado do mundo, isso tudo no meio de um congestionamento quilométrico (ou em outra situação similar), permite interagir mais e mais com o trabalho, mesmo longe do escritório.

Tal vantagem pode até parecer óbvia, mas acredito que ainda estamos longe de compreender o impacto das mudanças trazidos pelo uso de aplicações móveis em larga escala. Tanto que alguns economistas propõem que nos encontramos à beira de uma revolução na era da informação – a Economia Livre. Você não mais acessa a informação dentro de um ambiente determinado, como sua casa, escritório, escola, Internet Café. O acesso à informação torna-se livre e independente de localização.

Se você não quer “perder o bonde”, então sugiro que comece agora a pensar em desenvolver soluções móveis. Mas lembre-se: isso não significa apenas começar novos projetos com "wireless" estampado nos documentos de requisitos. Você pode estender uma solução convencional, parcialmente pronta, adicionando módulos móveis. Imagine o seu sistema simples (mas crítico) de gerenciamento de contatos via web, agregado de funcionalidades de mobilidade que permitam ao usuário acessá-lo também através do celular ou PDA.

Porém, mesmo que você seja um desenvolvedor experiente, entrar nessa onda implica em pensar em questões às quais talvez esteja pouco acostumado.

Escassez e J2ME

É interessante perceber o impacto que a escassez pode gerar em todos nós. Por exemplo, antes da crise do petróleo, na década de 70, a gasolina era abundante e barata. Construíam-se carros enormes capazes de cortar os Estados Unidos de ponta a ponta, com consumo na casa de 5 quilômetros por litro – e ninguém realmente estava preocupado com a eficiência do motor, ou mesmo com a qualidade da gasolina, algo desnecessário diante de tanta abundância. Mas quando o petróleo encareceu, muita coisa começou a mudar. Até os pequenos passeios começaram a sair muito caro, e parecia que tudo iria parar e nada mais seria divertido como antes.

Fico imaginando o que aconteceria aos profissionais de informática de hoje se de repente surgisse uma lei internacional que taxasse o uso da internet por byte trafegado. Além dos previsíveis protestos de geeks e ataques a websites de empresas, uma conseqüência seria a procura por maior eficiência nos aplicativos, principalmente na utilização da rede.

Freqüentemente, deparo-me com profissionais Java que gostariam de ingressar no desenvolvimento de aplicações J2ME. O maior problema ao envolver-se com essa tecnologia, principalmente quando se vem do desenvolvimento em J2SE e J2EE, é achar que os recursos são abundantes como nestas áreas. Considerar que a rede sempre está disponível com alta velocidade e baixo custo, que a memória do dispositivo é vasta, que a tela é espaçosa e o poder de processamento é equivalente ao de um Centrino... Ilusão!

Aparelhos e comunicação

Ao decidir por criar uma solução móvel, comece fazendo uma pesquisa de mercado e avalie as tecnologias disponíveis na sua cidade ou região. Tente evitar qualquer tipo de solução que deva ser importada, para que não haja problemas com peças de reposição e suporte técnico.

Quanto a equipamentos, temos no mercado brasileiro alguns palmtops (PDAs), uma quantidade razoável de coletores de dados proprietários e uma variedade enorme de telefones celulares poderosos, oferecidos pelas operadoras de telefonia (veja o quadro "J2ME no Brasil").  

Tecnologias de aplicações

Qual é a melhor tecnologia? J2ME? SMS? MMS? Brew? Na verdade, todas têm suas vantagens e desvantagens (e não são mutuamente excludentes). Contudo, posso dizer com muita segurança que a tecnologia J2ME oferece a melhor relação custo/benefício por vários motivos:

1.    Se na empresa houver profissionais capazes de desenvolver em Java, eles poderão ser reaproveitados no desenvolvimento de soluções móveis. Isso é praticamente impossível se for adotada outra tecnologia.

2.    A enorme adoção de J2ME por fabricantes de celulares e operadoras permite que sua aplicação móvel seja capaz de rodar em uma ampla variedade de aparelhos, muitos já disponíveis no mercado brasileiro.

3.    Uma vez que a aplicação é instalada no aparelho, será possível executar a aplicação mesmo em áreas onde a operadora não ofereça cobertura. Uma vez que você retornar à área de cobertura, poderá ser estabelecida uma nova conexão, e enviados os dados pendentes.

Online ou offline?

Com tudo isso, lembre-se que nem todas as aplicações, apesar dos modismos, precisam ser on-line. Qualquer solução que envolva a obtenção de dados em tempo real, "pelo ar", exige uma forte infra-estrutura. Dessa forma, ou você adota uma infra-estrutura de alguma operadora e paga pelos custos dos dados trafegados, ou terá você mesmo que montar sua própria "infra" para envio dos dados (isso pode ser um problema, porque fatores como a dimensão da área a ser coberta e equipamentos de instalação, além de possibilidade da ocorrência de áreas de sombra, podem elevar desmasiadamente os custos da solução).

Outra tecnologia que vale conhecer de perto é a Bluetooth, que está agora deslanchando pra valer. Dois dispositivos quaisquer dotados dessa tecnologia – muitos celulares já vêm com Bluetooth embutido – podem trocar dados entre si com facilidade. Isso traz um leque de possibilidades para as soluções móveis, e permite realizar transmissões simplesmente aproximando seu aparelho de outro. Você até poderia fazer um peer-to-peer entre os dispositivos e eliminar a necessidade de qualquer tipo de infra-estrutura wireless.... mas isso seria um assunto para outro artigo.

Na minha visão, a utilização do Bluetooth irá nos permitir o desenvolvimento de soluções intermediárias, que possam ser parte offline, parte online. Como não existe a necessidade de adquirir cabos, então o tempo de uso dos aparelhos será muito maior. Se você conseguir colocar na mesa os custos envolvidos com aparelhos, acessórios e tráfego de dados, e eles forem de acordo com seu orçamento, então uma solução online será ideal: ela irá permitir avaliar o que está acontecendo fora da sua empresa ou casa todo o tempo, e ainda assim integrar com toda infra-estrutura de servidores existentes. Isso irá transformar a sua aplicação móvel em mais um “braço” de todo o sistema. Mas, como vimos, deve-se ter cuidado ao pressupor que toda solução online é necessariamente melhor que uma offline. Pondere cuidadosamente os custos envolvidos, principalmente aqueles relacionados ao tráfego de dados, antes de fazer uma decisão final para seu projeto.

O mercado e a onda

O número de brasileiros capazes de adquirirem um telefone celular é muito maior do que o dos que podem comprar um computador pessoal. É imenso o mercado a ser atingido pelos desenvolvedores de soluções móveis. Convido a você a embarcar nessa onda sem-fio, e a começar a desenvolver soluções acessíveis de qualquer lugar, utilizando a tecnologia J2ME.

 

Gerenciando a escassez

Para se tornar um bom profissional J2ME, você precisa mudar uma série de conceitos. Veja algumas dicas úteis para quando decidir entrar nessa área de desenvolvimento.

Onde fazer o processamento

Tente evitar realizar processamento intensivo no dispositivo. Deixe as tarefas que necessitam de mais recursos computacionais para o servidor e envie ao dispositivo apenas os resultados. A idéia é reduzir o tempo de resposta. Lembre-se que um usuário de aplicações J2ME geralmente tem menos paciência – afinal ele pode estar caminhando ou dirigindo enquanto usa sua aplicação. Definir o que o servidor e o dispositivo devem fazer não é uma tarefa simples e depende, é claro, do aplicativo. Mas, muitas vezes, usar o bom senso será suficiente. Um exemplo simples é fazer no servidor a ordenação de listas a serem visualizadas no aplicativo.

A tecnologia J2ME permite fazer esse tipo de decisão de forma a maximizar o uso do servidor, pois o dispositivo ganha um grau maior de “inteligência” (com outras tecnologias como SMS ou WAP isso não seria possível). Entretanto ao fazer o processamento no servidor, conseqüentemente, utilizando uma linha de comunicação da operadora, lembre-se de considerar os custos de comunicação envolvidos.

Simplicidade

Desenvolver aplicações fáceis de usar não é simples, principalmente se a lógica da aplicação exige que vários passos sejam feitos até se chegar ao resultado esperado. Entretanto, a tarefa é facilitada se você resolver tais questões durante a especificação e o projeto (design). Uma das formas mais eficazes de simplificar um aplicativo é retirar funcionalidades raramente utilizadas – sempre considere cada funcionalidade de forma cuidadosa antes de acrescentá-la. Caso seja necessário adicionar um recurso utilizado esporadicamente, considere colocá-lo numa aplicação à parte. MIDlets permitem o compartilhamento de dados no dispositivo de forma eficiente.

Uma vez que as funcionalidades desnecessárias tenham sido retiradas ou deixadas para uma segunda aplicação, dê uma boa olhada na interface com o usuário. Grande parte da aplicação é gasta trabalhando com telas, até se conseguir chegar ao resultado final. Procure reutilizar a mesma tela sempre que possível – isso não apenas reduz o tamanho da aplicação, como também facilita o aprendizado do usuário. Tente também projetar ações simples para cada funcionalidade, além de maneiras consistentes para acionar comandos na aplicação, e agrupe as funcionalidades mais utilizadas para que fiquem rapidamente acessíveis pressionando-se poucos botões. Mas, ao buscar essa simplificação, não se esqueça que você terá muitos tipos de usuários – não deixe de incluir funcionalidades para os usuários avançados “fuçadores”.

Otimizando o uso de memória

Como vimos, a quantidade de memória disponível nos dispositivos J2ME é bastante limitada. Seguem-se algumas dicas de como evitar o desperdício desse recurso.

Prefira tipos primitivos

O impacto da alocação de objetos no desempenho e na quantidade de memória consumida é especialmente significativo em aplicações J2ME. Para reduzir o número de objetos alocados, tente utilizar tipos primitivos sempre que possível. Por exemplo, considere estes métodos de uma classe hipotética para definir o tamanho de um componente:

 

public void setSize(int largura, int altura);

public void setSize(Dimension tamanho);

 

A primeira variação utiliza somente tipos primitivos; a segunda faz uso de um objeto, que deverá ser alocado antes. A primeira tem mais código, mas reduz a alocação de objetos, portanto seria mais adequada para aplicações J2ME.

Ajude o Garbage Collector

Embora o Garbage Collector (GC) tenha um papel essencial em Java, ele pode ser o “calcanhar-de-Aquiles” em aplicações J2ME. Quando se alocam muitos objetos rapidamente, o GC pode ter problemas para liberar objetos. Sua aplicação pode até ficar “congelada” por alguns instantes para que o coletor consiga fazer todo o seu trabalho.

Uma forma de agilizar a “limpeza” é sempre atribuir null a referências de objetos, sempre que tiver certeza que os objetos não serão mais utilizados. Por exemplo, você poderia definir um método finalizar(), dessa maneira:

 

public class MinhaClasse {

  private Object meuObjeto;

 

  public MinhaClasse(Object obj) {  meuObjeto = obj; }

  public void finalizar() {  meuObjeto = null;  }

}

 

Atribuindo um valor nulo às referências, você agiliza a coleta de lixo. E é uma técnica simples, que requer pouco código adicional.

Faça instanciamento preguiçoso

Outra técnica para reduzir picos de uso de memória é instanciar objetos apenas imediatamente antes de utilizá-los. Esta técnica é chamada de lazy instantiation ("instanciamento preguiçoso").

Primeiro é verificado se a referência do objeto é nula; caso positivo é criada uma nova instância. Veja um exemplo:

 

public class ClassePreguicosa {

  private Vector v;

 

  public Vector getVector()  {

    if(v == null) v = new Vector();

    return v;

  }

}

Reutilize objetos

Uma das melhores técnicas a utilizar em qualquer aplicação Java é alocar objetos e depois reutilizá-los para uso futuro. Criamos classes com métodos de inicialização e finalização, e fazemos o cache de objetos não mais utilizados. Por exemplo, considere a seguinte classe:

 

public class Exemplo {

  private Object valor;

 

  public Exemplo(Object v) { inicializa(v); }

  public Object getValor() { return valor; }

  public void inicializa(Object v) {  valor = v;  }

  public void finaliza() { valor = null; }

}

 

Assim, você garante uma reutilização da própria classe que estiver utilizando, e ainda ajuda o Garbage Collector.

Exceções com parcimônia

O uso de exceções tende a deixar o código mais limpo e é muito recomendado, mas em J2ME o recurso merece atenção especial, pois o levantamento de exceções aumenta a alocação de objetos. Tente usar outras maneiras que não exceções para lidar com erros comuns (ou previsíveis) que surgem durante a execução.

 

Links

archive.devx.com/wireless/articles/rb0501/rb0501-1.asp

Designing Effective User Interfaces for Wireless Devices

j2medeveloper.com/j2mebook/Chapter3.pdf

microjava.com/articles/techtalk/integration?content_id=3457

Strategies for J2ME MIDP/J2EE Integration over HTTP

 

Mauricio Leal é Sócio-diretor da Nortlam Networks, empresa voltada a soluções baseada em Java e parceira de desenvolvimento em soluções de dados J2ME para a Nextel. Iniciou os trabalhos de desenvolvimento Internet na Deutsche Telekom (telekom.de) em 1996, na Alemanha, e desde então vem trabalhando nos mais diferentes campos da tecnologia Java, incluindo sistemas distribuídos com JXTA e Jini, para grandes empresas.


 

Celulares J2ME no Brasil

 

 

Modelo

Rede

"

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?