Como eliminar uma atividade do Android ao deixá-la para que não possa ser acessada pelo botão Voltar?

130

Em uma determinada atividade do Android, eu gostaria de iniciar uma nova atividade para o usuário em algum momento. Depois que eles saem da primeira atividade e chegam à segunda, a primeira atividade fica obsoleta e eu quero removê-la completamente para que não possa ser acessada novamente pelo botão Voltar.

Como é a melhor maneira de conseguir isso? Como eu mato ou destruo essa atividade imediatamente após o usuário ter lançado a nova atividade?

JohnRock
fonte
Verifique esta resposta , foi útil para mim.
Daniyar

Respostas:

234

Você só precisa ligar finish()

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
CaseyB
fonte
Obrigado. Para dar um passo adiante, estou iniciando a nova atividade em uma janela de diálogo - o código funcionaria da mesma maneira?
JohnRock
@ CaseyB obrigado por isso ... mas eu quero saber, posso chamar esse método de um serviço? Se sim, então como?
swiftBoy
1
Os serviços não têm uma atividade, o que significa que eles não estarão na pilha de atividades para voltar. Se você deseja eliminar alguma atividade do seu serviço, deve poder chamar myActivity.finish ();
CaseyB
3
É uma resposta 7 anos de idade, e ainda válido para Android M e N.
zeeshan
1
O @juztcode onDestroyé um método de ciclo de vida que deve ser chamado apenas a partir da estrutura do Android.
CaseyB
106

A configuração android:noHistory="true"da atividade em seu manifesto removerá uma atividade da pilha sempre que ela for navegada. veja aqui

jqpubliq
fonte
11

você pode usar:

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Jmorvan
fonte
interessante! o que "FLAG_ACTIVITY_NO_HISTORY" significa exatamente?
Armando Marques Sobrinho
8

Você também pode adicionar android:noHistory="true"à sua Activitytag em AndroidManifest.xml.

<activity
            ...
            android:noHistory="true">
</activity>
Danke Xie
fonte
7

Sim, tudo o que você precisa fazer é chamar finish () em qualquer atividade que você gostaria de encerrar.

RobGThai
fonte
4

Escreva isso em cada "nova atividade" depois de inicializar sua nova intenção->

Intent i = new Intent(this, yourClass.class);
startActivity(i);
finish();
JBL AK-47
fonte
2

Finalmente, eu tenho uma solução!

Meu contexto é : - Quero desconectar a conexão do soquete quando a atividade é destruída, tentei terminar a atividade (), mas ela não funcionou , pois mantém a conexão ativa em algum lugar.

então eu uso android.os.Process.killProcess(android.os.Process.myPid()); o kill minha atividade e usei android:excludeFromRecents="true" para remover da atividade recente.

iamkdblue
fonte
1
Esta solução funcionou para mim, mas infelizmente mostra uma página em branco e, para fechar a conexão do soquete, você pode usar o socket.close (); .
Mehrdad
android.os.Process.killProcess(android.os.Process.myPid())mata o processo do aplicativo e não apenas a atividade. Isso significa que qualquer serviço em andamento (em segundo plano ou em primeiro plano) também será interrompido.
Wrichik Basu 14/04
1

Adicione esse atributo à sua atividade no arquivo de manifesto. android: noHistory = "true"

Mayuran Balasubramaniam
fonte
0

Você só precisa usar o código abaixo ao iniciar a nova atividade.

startActivity(new Intent(this, newactivity.class));
finish();
Soni Kumar
fonte