= o ns = "urn:schemas-microsoft-com:office:office" />
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
TEXT-INDENT: 0cm; TEXT-ALIGN: left; tab-stops: 411.1pt 20.0cm" align=left>MIDP 1.0
WMA 1.0
MMAPI 1.0
JavaPhone 1.0
PersonalJava 1.1.1
MIDP 2.0
Claro
Confira outros conteúdos:
Perguntas frequentes
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.