Comment tuer une activité Android en la quittant afin qu'elle ne soit pas accessible à partir du bouton retour?

131

Dans une activité Android donnée, je voudrais démarrer une nouvelle activité pour l'utilisateur à un moment donné. Une fois qu'ils quittent la première activité et arrivent à la seconde, la première activité est périmée et je souhaite la supprimer complètement afin qu'elle ne puisse plus être accédée à partir du bouton de retour.

Quelle est la meilleure façon d'y parvenir? Comment tuer ou détruire cette activité immédiatement après que l'utilisateur a lancé la nouvelle activité?

JohnRock
la source
Vérifiez cette réponse , cela m'a été utile.
Daniyar

Réponses:

235

Tu as juste besoin d'appeler finish()

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
CaseyB
la source
Je vous remercie. Pour aller plus loin, je commence la nouvelle activité à partir d'une fenêtre de dialogue - le code fonctionnerait-il de la même manière?
JohnRock
@CaseyB merci pour cela ... mais je veux savoir, puis-je appeler cette méthode à partir d'un service si oui, comment?
swiftBoy
1
Les services n'ont pas d'activité, ce qui signifie qu'ils ne seront pas dans la pile d'activités vers laquelle revenir. Si vous souhaitez supprimer une activité de votre service, vous devriez pouvoir appeler myActivity.finish ();
CaseyB
3
C'est une réponse vieille de 7 ans, et pourtant toujours valable pour Android M et N.
zeeshan
1
@juztcode onDestroyest une méthode de cycle de vie qui est uniquement destinée à être appelée à partir du framework Android.
CaseyB
106

La définition android:noHistory="true"de l'activité dans votre manifeste supprimera une activité de la pile à chaque fois qu'elle est éloignée de. voir ici

jqpubliq
la source
11

vous pouvez utiliser:

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Jmorvan
la source
intéressant! que signifie exactement "FLAG_ACTIVITY_NO_HISTORY"?
Armando Marques Sobrinho
8

Vous pouvez également ajouter android:noHistory="true"à votre Activitytag dans AndroidManifest.xml.

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

Oui, tout ce que vous avez à faire est d'appeler finish () dans n'importe quelle activité que vous souhaitez fermer.

RobGThai
la source
4

Écrivez ceci dans chaque "nouvelle activité" après avoir initialisé votre nouvelle intention->

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

Enfin, j'ai une solution!

Mon contexte est : - Je veux déconnecter la connexion de socket lorsque l'activité est détruite, j'ai essayé de terminer l'activité () mais cela ne m'a pas fonctionné , sa connexion reste en direct quelque part.

donc j'utilise android.os.Process.killProcess(android.os.Process.myPid()); son tuer mon activité et je l'ai utilisé android:excludeFromRecents="true" pour supprimer de l'activité récente.

iamkdblue
la source
1
Cette solution a fonctionné pour moi mais affiche malheureusement une page vierge et pour fermer la connexion socket, vous pouvez utiliser socket.close (); .
Mehrdad
android.os.Process.killProcess(android.os.Process.myPid())tue le processus d'application et pas seulement l'activité. Cela signifie que tout service en cours (en arrière-plan ou au premier plan) sera également arrêté.
Wrichik Basu le
1

Ajoutez cet attribut à votre activité dans le fichier manifeste. android: noHistory = "vrai"

Mayuran Balasubramaniam
la source
0

Il vous suffit d'utiliser le code ci-dessous lors du lancement de la nouvelle activité.

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