Controlar o empilhamento de Activitys com finish()

3 Flares Twitter 0 Facebook 3 Google+ 0 LinkedIn 0 Filament.io 3 Flares ×

Olá Pessoal, o assunto de hoje não é muito extenso, mas não deixa de ser interessante. Antes um breve revisão do ciclo de vida da Activity conforme a tela abaixo:

Ciclo de vida da Activity

Cada vez que uma activity é executada os métodos acima são chamados de acordo com a situação. Ao chamar uma activity o método onCreate() é executado. Se a aplicação retornar para  a mesma instância da Activity quem é executado é o onStart(). Leia atentamente a documentação para um entendimento mais profundo do assunto.

Se fizermos uma chamada para ActivityFoo e na sequencia fizermos outra para ActivityBar esta segunda ficará a primeira. Ao encerrar a segunda ou clicar no botão “voltar” do aparelho o aplicativo irá recarregar a primeira activity.

Mas e o que ocorre se por algum motivo eu preciso chamar a mesma activity sequencialmente e não quiser empilhar mas apenas substituir? ou se quero chamar uma outra activity qualquer que ao invés de empilhar sobre a atual quero simplesmente substituir a activity atual pela nova?

Talvez existam outras formas de fazer mas eu resolvi utilizando o método finish().  Faça a chamada deste metodo logo após a chamada da nova activity.

Intent it = new Intent(getBaseContext(), Activity.class);
startActivity(it);
finish();

Como a execução ocorre de forma assíncrona, assim que que a nova activity for iniciada a atual será fechada, liberando uma posição na pilha.