Wie kann ich eine Android-Aktivität beenden, wenn ich sie verlasse, damit über die Schaltfläche "Zurück" nicht darauf zugegriffen werden kann?

130

In einer bestimmten Android-Aktivität möchte ich irgendwann eine neue Aktivität für den Benutzer starten. Sobald sie die erste Aktivität verlassen und zur zweiten gelangen, ist die erste Aktivität veraltet und ich möchte sie vollständig entfernen, damit über die Schaltfläche "Zurück" nicht mehr darauf zugegriffen werden kann.

Wie ist der beste Weg, dies zu erreichen? Wie kann ich diese Aktivität sofort beenden oder zerstören, nachdem der Benutzer die neue Aktivität gestartet hat?

JohnRock
quelle
Überprüfen Sie diese Antwort , es war nützlich für mich.
Daniyar

Antworten:

234

Sie müssen nur anrufen finish()

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
CaseyB
quelle
Danke dir. Um noch einen Schritt weiter zu gehen, starte ich die neue Aktivität über ein Dialogfenster. Würde der Code genauso funktionieren?
JohnRock
@CaseyB danke dafür..aber ich möchte wissen, kann ich diese Methode von einem Service aus aufrufen, wenn ja, wie dann?
SwiftBoy
1
Dienste haben keine Aktivität, was bedeutet, dass sie sich nicht im Aktivitätsstapel befinden, zu dem sie zurückkehren können. Wenn Sie eine Aktivität aus Ihrem Dienst beenden möchten, sollten Sie myActivity.finish () aufrufen können.
CaseyB
3
Es ist eine 7 Jahre alte Antwort und dennoch gültig für Android M und N.
Zeeshan
1
@juztcode onDestroyist eine Lebenszyklusmethode, die nur über das Android-Framework aufgerufen werden soll.
CaseyB
106

Wenn Sie android:noHistory="true"die Aktivität in Ihrem Manifest festlegen, wird eine Aktivität vom Stapel entfernt, wenn von ihr weg navigiert wird. siehe hier

jqpubliq
quelle
11

Sie können verwenden:

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Jmorvan
quelle
interessant! Was bedeutet "FLAG_ACTIVITY_NO_HISTORY" genau?
Armando Marques Sobrinho
8

Sie können android:noHistory="true"Ihrem ActivityTag auch hinzufügen AndroidManifest.xml.

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

Ja, Sie müssen in jeder Aktivität, die Sie schließen möchten, nur finish () aufrufen.

RobGThai
quelle
4

Schreiben Sie dies in jede "neue Aktivität", nachdem Sie Ihre neue Absicht initialisiert haben->

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

Endlich habe ich eine Lösung!

Mein Kontext ist : - Ich möchte die Socket-Verbindung trennen, wenn die Aktivität zerstört wurde. Ich habe versucht, die Aktivität () zu beenden, aber es hat mir nicht funktioniert Verbindung bleibt irgendwo aktiv.

Also benutze ich es, android.os.Process.killProcess(android.os.Process.myPid()); um meine Aktivität zu beenden und android:excludeFromRecents="true" um sie aus der letzten Aktivität zu entfernen.

iamkdblue
quelle
1
Diese Lösung hat bei mir funktioniert, zeigt aber leider eine leere Seite an. Zum Schließen der Socket-Verbindung können Sie socket.close () verwenden. .
Mehrdad
android.os.Process.killProcess(android.os.Process.myPid())beendet den App-Prozess und nicht nur die Aktivität. Dies bedeutet, dass alle laufenden Dienste (Hintergrund oder Vordergrund) ebenfalls gestoppt werden.
Wrichik Basu
1

Fügen Sie dieses Attribut Ihrer Aktivität in der Manifestdatei hinzu. android: noHistory = "wahr"

Mayuran Balasubramaniam
quelle
0

Sie müssen nur den folgenden Code verwenden, um die neue Aktivität zu starten.

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