Por que eu devo ler este artigo:Esse artigo apresenta uma nova biblioteca de suporte para Android chamada Data Binding que pode ser usada a partir do Android 2.1 (API 7). Com essa biblioteca você poderá declarar diretamente em seu layout os pontos onde serão mostrados seus dados e com isso minimizar o código necessário para ligar seu modelo à sua interface gráfica. Será explicado como escrever seu layout para que dados sejam automaticamente populados, como ligar eventos diretamente do layout para seu código e como fazer com que atualizações de seu modelo sejam refletidas diretamente na interface. Também discutiremos brevemente a tecnologia usada para desenvolver essa biblioteca.

Aplicações Android normalmente precisam exibir algum tipo de dado em sua interface gráfica e muitas vezes precisam atualizar a interface quando esses dados são alterados. Para fazer essa ligação entre dados e interface gráfica precisamos recuperar uma referência para a View, setar o dado inicial, usar algum mecanismo para ser notificado de alteração nos dados e atualizar a interface gráfica quando esses dados forem alterados.

Data binding é um mecanismo pelo qual dados são conectados diretamente à interface do usuário e atualizações feitas nos dados são automaticamente refletidas na interface. Com esse mecanismo é possível diminuir muito o código necessário para a visualização e atualização dos dados, evitando erros comuns e facilitando a manutenção de seu código.

Algumas implementações de data binding também fazem a ligação inversa: alterações na interface atualizam automaticamente os dados. Quando há a ligação em ambas as direções, o mecanismo é chamado de two-way data binding (ligação de duas vias). Infelizmente a versão atual da biblioteca para Android não suporta a segunda via.

Nos tópicos a seguir veremos como a biblioteca de data binding usa a ferramenta Java de processamento de anotações para gerar o código que ligará o modelo à interface gráfica. Veremos também como o padrão de projeto observer é utilizado para receber notificações de alterações nos dados e como utilizar essa biblioteca em um projeto exemplo, que utilizará data binding para exibir uma lista de contatos.

Geração de código em Java

A biblioteca de data binding utiliza uma ferramenta do compilador Java para processar o seu código fonte e gerar novas classes que farão o meio de campo entre os seus dados e a sua interface. Essa ferramenta se chama processador de anotações (Annotation Processing) e existe desde a versão 5 do Java, porém se tornou mais estável e fácil de usar com o lançamento da versão 6.

Como o nome sugere, o processador de anotações irá analisar as anotações existentes em seu código fonte e gerar um novo código baseado nelas. Isso acontece em tempo de compilação e pode haver mais de uma rodada de processamento até que todas as anotações sejam processadas e todo o código necessário seja gerado.

O processador nada mais é que uma classe Java que implementa a interface javax.annotation.processing.Processor. Essa classe declara quais anotações ela está interessada em processar e recebe como entrada o código fonte original e um ambiente para que se possa gerar novo código. Após o processador terminar de gerar o código na primeira rodada, o compilador irá chamá-lo novamente com o código fonte original e o gerado na primeira rodada. Esse processo é repetido até que o processador não gere mais código.

Todo esse processamento acontece em tempo de compilação e não irá impactar a sua aplicação em tempo de execução. Isso faz com que processadores de anotações sejam ótimas ferramentas para eliminar a necessidade de escrever código manualmente para tarefas que são bem definidas e repetidas em vários pontos de sua aplicação.

No caso específico da biblioteca de data binding, o código gerado irá recuperar as views de seu layout que precisam ser preenchidas com dados, aplicar os dados iniciais a essas views e observar mudanças nos dados para que elas sejam atualizadas. Essas são tarefas bem definidas e que se repetem várias vezes nas Activities, Fragments e Adapters. Ter um robô que gera código acelera o desenvolvimento e diminui a ocorrência de bugs.

Outros exemplos de bibliotecas que usam os processadores de anotações e facilitam o desenvolvimento Android são:

  • ButterKnife: elimina a necessidade de chamar findViewById() utilizando a anotação @InjectView em seus campos que referenciam views;
  • Parceler: transforma seus POJOs em parcelables com a anotação @Parcel;
  • Dagger: injeção de dependência sem utilizar reflection;
  • Ice ...
    Quer ler esse conteúdo completo? Tenha acesso completo