Neste post eu farei uma breve introdução ao RoboGuice, uma das ferramentas disponíveis no Android para injeção de dependência. Com o simples exemplo apresentado a seguir será possível ter uma noção da grande utilidade e praticidade que o RoboGuice fornece aos projetos mobile. Quem já utiliza Spring ou algo similar no desenvolvimento Java, sabe como este modelo de programação é útil.
Bom, chega de papo e vamos ao exemplo:
Uma Activity Android normal, que representa uma tela de login, ficaria aproximadamente da seguinte forma. Com as declarações dos widgets e sua criação através do findViewById no método onCreate:
[cc lang=”java” width=”100%”]
public class MainActivity extends Activity {
EditText username;
EditText password;
Button login;
/**
* Called when the activity is first created.
*
* @param savedInstanceState
* If the activity is being re-initialized after previously being
* shut down then this Bundle contains the data it most recently
* supplied in onSaveInstanceState(Bundle). Note: Otherwise it
* is null.
*/
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
username = (EditText) findViewById(R.id.usr);
password = (EditText) findViewById(R.id.pwd);
login = (Button) findViewById(R.id.login);
// Implementação do método…
}
[/cc]
Com RoboGuice, o código ficaria da seguinte forma:
[cc lang=”java” width=”100%”]
public class MainActivity extends RoboActivity {
@InjectView(R.id.username)
EditText username;
@InjectView(R.id.password)
EditText password;
@InjectView(R.id.login)
Button login;
/*
* (non-Javadoc)
*
* @see roboguice.activity.RoboActivity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Implementação do método…
}
}
[/cc]
Com um código extremamente mais ‘limpo’ e sem se preocupar com a criação de instancias de Views, Resources, Serviços, etc… Podemos trabalhar com mais facilidade e nos preocupar de fato apenas com a implementação do código e a lógica de negócios necessária na aplicação.
Mas, infelizmente, nem tudo são flores. Não sei se você percebeu, mas no segundo exemplo tivemos que extender nossa classe de RoboActivity, o que deixa nosso código extremamente acoplado e dependente de um framework externo. O RoboGuice provê diversas subclasses de Activity, já que, no Android, temos que utilizar diferentes tipos de Activity para diversos layouts de tela.
Outro ponto fraco do RoboGuice, é que a injeção de dependências é executada em tempo de execução, o que pode trazer um custo a mais à sua aplicação. Entretanto, fica a seu cargo decidir se o RoboGuice é uma boa opção ou não para a sua aplicação. De qualquer forma, vale o conhecimento! 🙂
Em breve divulgarei mais alguns posts sobre o RoboGuice, aguardem!
Este foi mais um post da série Android, espero que tenham gostado. Quaisquer dúvidas, sugestões e/ou reclamações, comentem!
_________________________________________
Lucas Oliveira – Analista Programador na redspark.
Bacharel em Sistemas de Informação pela Universidade de São Paulo.
@OliveiraLima_
A parte de ser executada no celular e que e algo que ainda me incomoda apesar de achar que o codigo fica MUITO mais limpo fico me questionando o quanto isso vale a pena e em que tipo de projeto isso pode ser realmente vantajoso. Atualmente tenho utilizado bastante o Android Annotation (http://androidannotations.org) que deixa o codigo tão ou mais limpo mas faz todo o processamento na hora da compilação utilizando Java Annotation Processing Tool (http://docs.oracle.com/javase/6/docs/technotes/guides/apt/index.html)
Olá Daniel!
Realmente, isto é um ponto bastante crítico do framework e devemos ter bastante cuidado ao utilizá-lo. A recomendação é que seja utilizado em projetos de grande porte, de forma que o custo será inferior ao benefício. Sobre o Android Annotations, este é um framework excepcional e eu pretendo falar dele também em breve 🙂 Inclusive já adianto que os dois (RoboGuice e AA) podem coexistir em um mesmo projeto, apesar das sobreposições.
Obrigado pelo comentário e pelas dicas!
Oi Lucas, legal seus posts sobre Android, estou procurando me especializar no assunto, mas ainda não encontrei um roteiro legal de estudo. Acho que vou ter que fazer um curso mesmo. A D-Click presta esse serviço? Acho que o ideal seria online.
Você conhece os cursos de Android da Devmedia? O que você acha deles? Pode me ajudar? Obrigada.
Os links dos cursos que falei são esses:
http://www.devmedia.com.br/curso/introducao-ao-android-sdk/306
http://www.devmedia.com.br/curso/curso-de-android-sdk-dominando-a-api/329
Obrigada mais uma vez e me desculpe se usei o espaço errado para te perguntar isso, mas você me pareceu saber o que escreve e achei que poderia ajudar.
Olá Patrícia!
Obrigado pelo comentário. A DClick não oferece nenhum curso de Android no momento, infelizmente. As opções que eu posso te indicar são:
O curso da Caelum, que é uma excelente escola: http://www.caelum.com.br/curso/fj-57-desenvolvimento-google-android/
O próprio site da Google oferece um roteiro de treinamento bastante interessante: http://developer.android.com/training/index.html (O único impeditivo talvez seja o fato de ser em inglês)
E se você tiver alguma sugestão de post pode pedir ou pelo meu twitter ou aqui mesmo pelos comentários que eu tentarei te ajudar.