Ich habe mehrere Aktivitäten in meiner Bewerbung. und der Fluss ist sehr kompliziert. Wenn ich auf die Abmeldeanwendung klicke, navigiere ich zum Anmeldebildschirm und von dort aus kann der Benutzer über die Schaltfläche Abbrechen (Anrufen system.exit(0)
) beenden.
Wenn ich die Schaltfläche "Beenden" oder "Zurück" beende, ruft das System eine Aktivität vom Stapel auf :( Wie kann ich alle Aktivitäten im Stapel löschen, wenn ich den Anmeldebildschirm erreiche? Das Aufrufen finish()
ist nicht praktikabel, da es so viele Aktivitäten gibt und einige Aktivitäten nicht geschlossen werden sollten, wenn Sie sind aktiv, z. B. native Kamera, die Aktivitäten aufruft.
validateuser logoutuser = new validateuser();
logoutuser.logOut();
Intent loginscreen = new Intent(homepage.this, Login2.class);
(homepage.this).finish();
loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(loginscreen);
android
android-activity
stack
Jay Mayu
quelle
quelle
Antworten:
Die meisten von euch liegen falsch. Wenn Sie einen vorhandenen Aktivitätsstapel schließen möchten, unabhängig davon, was sich dort befindet, und einen neuen Stamm erstellen möchten, müssen Sie folgende Flags verwenden:
Aus dem Dokument :
quelle
IntentCompat.makeRestartActivityTask
Support-Bibliothek.Wenn Sie
startActivity
die letzte Aktivität aufrufen, können Sie diese immer verwendenals Flagge auf diese Absicht.
Lesen Sie mehr über die Fahne hier .
quelle
Hier ist eine einfache Hilfsmethode zum Starten einer neuen Aktivität als neue Top-Aktivität, die von API-Ebene 4 bis zur aktuellen Version 17 funktioniert:
Nennen Sie es so aus Ihrer aktuellen Aktivität:
quelle
Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB
sonstintent.addFlags(0x8000);
wird es nie hinzugefügtLöschen Sie den Aktivitäts-Backstate mit dem folgenden Code:
Getan
quelle
In meinem Fall wurde LoginActivity ebenfalls geschlossen. Als Ergebnis,
hat nicht geholfen.
Allerdings Einstellung
half mir.
quelle
quelle
this.finish()
undsetFlags()
auch, um aktuelle Aktivitäten zu löschen?Ich habe festgestellt, dass Sie nach einer Lösung gefragt haben, auf die Sie sich nicht verlassen können
finish()
, aber ich frage mich, ob dies dennoch hilfreich sein kann.Ich habe verfolgt, ob ein Exit-Flag mit einer statischen Klassenvariablen ausgelöst wird, die die gesamte Lebensdauer der App überlebt. Verwenden Sie in jeder relevanten Aktivität
onResume()
Die ExitHelper-Klasse
Angenommen, in mainActivity drückt ein Benutzer eine Taste, um das Programm zu beenden. Sie können dies festlegen
ExitHelper.isExitFlagRaised = true;
und dannfinish()
. Danach werden auch andere relevante Aktivitäten beendet, die automatisch wieder aufgenommen werden.quelle
Diese Entscheidung funktioniert gut:
Aber neue Aktivitäten werden lange gestartet und Sie sehen einige Zeit einen weißen Bildschirm. Wenn dies kritisch ist, verwenden Sie diese Problemumgehung:
Wie man es benutzt:
Nachteil: Alle Aktivitäten, die auf dem Stapel geschlossen werden müssen, müssen BaseActivity erweitern
quelle
Für Xamarin-Entwickler können Sie Folgendes verwenden:
quelle
Kotlin verwenden:
Sie können das Flag direkt mit der Setter-Methode setzen. In Kotlin
or
ist der Ersatz für Java bitweise oder|
.Wenn Sie dies regelmäßig verwenden möchten, erstellen Sie eine Intent-Erweiterungsfunktion
Sie können diese Funktion dann direkt aufrufen, bevor Sie die Absicht starten
quelle