O Objeto Application do Android é o ponto de entrada global para a sua aplicação, nesse objeto podemos manter estados (variáveis) de escopo global e também podemos responder a eventos de nível de aplicação.
Criando sua própria Classe Application no Android
O Android já nos fornece uma objeto Application genérico, mas podemos extender a sua classe Application e adicionar novos comportamentos a ela. Isso se torna util, quando precisamos acessar valores de qualquer ponto da aplicação sem precisar ficar acessando o banco de dados ou as Preferencias Compartilhadas (SharedPrefeneces).
Inicialmente criamos nossa classe:
public class MyApplication extends Application {
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onLowMemory() {
super.onLowMemory();
}
@Override
public void onTerminate() {
super.onTerminate();
}
}
E então declaramos a nossa classe Application no manifest, assim o Android saberá que deve carregar nossa classe ao invés da classe genérica.
Para obter uma instancia do objeto Application, só precisamos fazer uma chamada em qualquer Activity.
MyApplication mApplication = (MyApplication)getApplicationContext();
Manter estados globais da Aplicação
Para manter dados acessíveis de qualquer ponto da aplicação como por exemplo dados de login do usuário, basta criar atributos na nossa classe Application. E torna-los acessíveis (atributos públicos, ou getters/setters).
private String login;
private String senha;
public void setLogin(String login){
this.login = login;
}
public String getLogin(){
return this.login;
}
public void setSenha(String senha){
this.senha = senha;
}
public String getSenha(){
return this.senha;
}
Depois disso você já tem acesso a esses dados nas suas Activities.
MyApplication mApplication = (MyApplication)getApplicationContext();
String login = mApplication.getLogin();
String senha = mApplication.getSenha();
//E para sobrescrever os dados
mApplication.setLogin("Novo_Valor_Login");
mApplication.setSenha("Novo_Valor_senha");
Tratamento de Eventos a nível de Aplicação
Podemos usar a nossa class Application para responder aos seguintes eventos do sistema.
onConfigurationChanged, chamado pelo sistema Android toda vez que as configuracoes do sistema forem alteradas, como por exemplo, mudança de idiomas, ou Orientação da tela;
onCreate, chamada logo assim que a aplicação inicia, antes de todos os outros objetos;
onLowMemory, chamada quando o sistema detecta que está com pouca memória disponível, avisando a todas as aplicações se preparem, pois poderão ser encerradas a qualquer momento sem outro aviso
onTerminate, chamada quando a sua aplicação se encerra. Essa chamada funciona apenas no ambiente de emuladores, em um aparelho real, um processo pode ser removido apenas matando-o, e nesse caso essa chamada nunca será executada.
Acessando a sua Classe Application como um Singleton
Uma boa prática é chamar o objeto Application como um singleton, evitando assim que múltiplas instancias possuam variáveis globais com valores discordantes.
public class MyApplication extends Application {
private static MyApplication singleton;
public MyApplication getInstance(){
return singleton;
}
@Override
public void onCreate() {
super.onCreate();
singleton = this;
}
}
Dessa maneira, a classe Application sempre retornará a instancia (this) quando for chamada, mantendo a consistência dos dados.
Concluindo
A classe Application é uma ótima opção para armazenar dados de uso frequente, mas cuida, não coloque coisas demais nesta classe, se voce precisa acessar dados muito complexos ou grandes demais melhor guarda-los no local storage ou banco de dados.
Commentaires