Strict Standards: Non-static method themeGluedIdeas_Subtle::initOptions() should not be called statically in /home/riopro/www/blog.riopro.com.br/wp-content/themes/gluedideas_subtle/header.php on line 19
Riopro Blog - » Gdd Brasil 2009 - Android e as lições aprendidas

Gdd Brasil 2009 - Android e as lições aprendidas



Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/riopro/www/blog.riopro.com.br/wp-includes/formatting.php on line 82

Como prometido, esse post vai falar sobre a palestra final do James Yum no Google Developers Day (GDD). A palestra tinha o nome de “Android, a arte do debugging dos mestres Ninja”. Para mim foi uma apresentação sobre boas práticas ao criar aplicações para o Android. Eu ia escrever esse post na última sexta (3/7), mas o meu primogênito, Felipe, nasceu e mudou um pouco a ordem das coisas. Por isso, esse post é, para mim, algo realmente especial.

Nem tudo que aparecerá nesse post foi apresentado na palestra. Parte veio da conversa após a palestra com o James Yum, que pareceu sempre interessado na troca de idéias e em ajudar a esclarecer dúvidas sobre a plataforma.

O Android é um sistema operacional ainda em evolução. Como qualquer ferramenta livre, a estabilização da plataforma é algo um pouco mais lento. Afinal de contas, quem certifica não é uma empresa, mas uma comunidade (eu sei, essa afirmação é um pouco forte, mas pense a respeito). É ela que ajuda a estabelecer os próximos objetivos e, por fim, que chancela o sucesso ou fracasso da mesma.

Essa palestra focou em debbuging porque, a meu ver, é crítico que quem use um celular com Android ache que a plataforma é rápida. E aplicações mal escritas ou mal debugadas ajudam a passar uma impressão ruim sobre a plataforma. Isso explica, por exemplo a inclusão da possibilidade de compilar partes da aplicação em C++ ao invés de Java, para aumentar a performance.

Durante a sessão, várias ferramentas e dicas ajudam ao desenvolvedor foram dadas. Vamos primeiros às dicas para tornar sua aplicação mais eficiente:

  1. Não bloqueie a thread principal com operações lentas. Ou seja, gaste o menor tempo possível para iniciar a sua aplicação e jogue outros processamentos para backgound por exemplo.
  2. Evite layouts que herdam de vários layouts em cascata mas que fazem poucas coisas. Opte por layouts relativos ao invés de fixos. Isso reduzirá o consumo de memória;
  3. Cacheie imagens. Isso ajudará a reduzir em muito o tempo de resposta da sua aplicação;
  4. A biblioteca padrão do interpretador JSON não é tão eficiente assim. Por isso, se a sua aplicação depende muito desse tipo de dados, talvez faça sentido (em termos de performance) desenvolver um interpretador você mesmo, baseado nas suas restrições.

Em termos de ferramentas, algumas muito interessantes foram apresentadas. è importante, antes de mais nada.

A primeira foi a Traceview. Essa ferramenta ajuda a criar um log de debug da aplicação. Essa ferramenta fornece, também, uma capacidade de profiling de tempo de resposta para a aplicação. Ou seja, com ela você pode depurar que classes e métodos estão consumindo mais tempo na aplicação. Isso ajuda na otimização da aplicação. Lembre-se, porém, de evitar otimização prematura que comprometa a legibilidade do seu código mas não gera um aumento grande de eficiência (a não ser que sua aplicação seja muito pesada e crítica).

Em seguida foi apresentado o Hierarchy Viewer. Essa aplicação auxilia na otimização da dica 2. Ao mostrar a estrutura de heranças dos layouts da sua aplicação, você pode ver aonde está exagerando (excesso de personalização ineficiente de layouts) e corrigir.

Por último veio o Allocation Tracker. O garbage collector, aqui palavras do próprio Yum, é bastante ineficiente e custoso. Veja a explicação nesse quoting do Android’d Developers Blog

Most of the time, garbage collection occurs because of tons of small,
short-lived objects and some garbage collectors, like generational
garbage collectors, can optimize the collection of these objects
so that the application does not get interrupted too often. The
Android garbage collector is unfortunately not able to perform
such optimizations and the creation of short-lived objects in
performance critical code paths is thus very costly for your application.

Por isso, essa ferramenta ajuda em uma outra forma de profiling: a de uso de memória. Ao te ajudar a verificar o consumo de memória dos objetos da sua aplicação, ela procura diminuir a ineficiência da aplicação tanto para terceiros quando no uso dela mesma.

Na parte de perguntas eu quis saber quais as ferramentas de testes usadas para as aplicações e a resposta foi mais ou menos assim: “Não usamos. Quer dizer, usamos mais na parte de modelo”, mas sem explicar como. Isso para mim mostra um pouco de imaturidade da plataforma (caramba, estou generalizando a resposta demais).

Uma preocupação muito discutida no final foi a respeito de como se dará a evolução e mesmo, se haverá segmentação entre os diferentes fabricantes (veja por exemplo o a nova skin da HTC chamada Hero). James apontou que a personalização é algo inevitável, já que é, o que diferenciará o poder de venda de cada fabricante. Mas ressaltou, porém, que a Google (parte da aliança) e fomentador do projeto, não vê vantagem em uma profusão de API’s que tornem o desenvolvimento caso a caso.

Isso seria repetir o que ocorreu com a JVM) em plataformas mobile, que acabou virando algo tão específico de cada aparelho, que torna a) complicado para o usuário saber como usar; b) custoso de manter (cada novo aparelho gera retrabalho) e c) sem boca-a-boca de aplicações (porque o usuário não tem vontade para falar para outros usuários algo que ele não sabe ao certo como funciona).

Espero que esse Brain Dump tenha sido interessante. Boa otimização para sua aplicação.

Informações e Links

Junte-se comentando, lendo o que os outros dizem ou colocando um link a partir do seu blog.


Outros Artigos

Strict Standards: Only variables should be assigned by reference in /home/riopro/www/blog.riopro.com.br/wp-includes/post.php on line 117
Tornando o Firefox 3.5 o seu browser padrão no Ubuntu 9.04

Strict Standards: Only variables should be assigned by reference in /home/riopro/www/blog.riopro.com.br/wp-includes/post.php on line 117
Gdd Brasil 2009 - evento em geral

Comente

Tire um tempo para comentar e nos dizer o que você acha. Alguns códigos HTML são permitidos para formatação.

Comentários dos Leitores

Seja o primeiro a comentar!