Wie der Android-Stack von Aktivitäten löschen?
-
10-10-2019 - |
Frage
ich eine Anwendung mit mehreren Aktivitäten in Android und ich möchte, dass die Benutzer in der Lage sein, durch Drücken einer Menütaste, um abzumelden. Das Problem, das ich habe ist, dass
A) Android lässt Sie nicht die Anwendung beenden und
B), auch wenn ich den Benutzer auf LoginActivity
wieder sie können immer drücken Sie zurück und erhalten direkt zurück zur vorherigen Tätigkeit, die sie in waren senden.
Ich habe bereits versucht, die Aktivität mit den beiden folgenden Flags zu starten:
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
ich auch mit jedem von ihnen selbst ausprobiert.
Ich habe auch versucht finish()
nach startActivity(intent)
Aufruf als ich in einem anderen lesen Stackoverflow
Frage.
Lösung
Ihre Login-Aktivität, überschreiben Sie die Zurück-Taste, so dass es Ihre App versteckt, anstatt die Aktivität von Bearbeitung:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
Auch sicher sein, zu Satz Android-Version:. AlwaysRetainTaskState = „true“ auf der Stammaktivität, so Android nicht gelöscht Ihren Stack (einschließlich der Login-Aktivität) nach 30min Inaktivität von Benutzern
Dann rufen Sie einfach finish (), wenn es eine erfolgreiche Anmeldung ist.
Andere Tipps
Diese bitweise ODER-verknüpft sein sollte oder Sie die frühere Flagge am Ende überschrieben wird.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Wie so:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
Wie pro Wakka in eine Aktivität aus der Geschichte entfernen Stapel ...
Fügen Sie android:noHistory="true"
Attribut zu Ihrem <activity>
im AndroidManifest.xml
wie folgt aus:
<activity android:name=".MyActivity"
android:noHistory="true">
</activity>
Wenn Sie Android API 11
oder höher verwenden, können Sie den folgenden Code verwenden, um die Stapel zu löschen.
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
Diese nicht Ihre Aktivität zurück Stapel löschen.
Auch nach all der oben Antwort folgen, wenn ich die Zurück-Taste gedrückt zeigte, dass es die letzte Aktivität für eine Sekunde, bevor die App geschlossen wird.
Das ist, was ich getan habe:
@Override
public void onBackPressed() {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
Jetzt meine app Ausfahrten auf der Rückseite drücken :) ohne jede Hektik.
Einstellung Intent.FLAG_ACTIVITY_CLEAR_TOP
hat sich für mich in einem sehr ähnlichen Fall gearbeitet, wo ich nicht die Intent.FLAG_ACTIVITY_NEW_TASK
-Flag gesetzt hat. Haben Sie versucht, ohne?
Diese Arbeit für mich:)
Intent main = new Intent(this, A_Activity.class);
main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(main);
Intent tool = new Intent(this, B_Activity.class);
startActivity(tool);
finish();
Wenn A ist meine Stammaktivität zum Beispiel
Ich habe Tätigkeiten A -> B -> C -> D, wenn ich Aktivität rufen E auf Stapel beginnen Ich habe jetzt A -> E
Ich weiß nicht, ist es gut :) aber funktioniert.
Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
schreibe dies und beachten: LoginActivity
müssen sich zuerst als Launcher und
Wenn Sie Launcher Modi die Fahnen sind schreiben überschrieben seinen Zweck, entfernen, so die launchermode
und versuchen Sie es sicher bekommen
Versuchen Sie diese
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Wenn wir diesen Code verwenden Login-Aktivität zu starten (A):
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
Die Aktivität sollte in dem Stapel von Aktivitäten sein, andernfalls sind Flags keine Auswirkungen haben.
Wenn wir finish () in der Anmeldung Aktivität (A) verwenden, nach Tätigkeit Start (B) (zu vermeiden A von B zurück), die Aktivität A (Login) wird nicht in dem Stapel sein. Genau das gleiche passiert, wenn die Login-Aktivität „Nohistory“ als Attribut hat.
die Lösung für mich war also eine Mischung aus anderen Antworten:
Dieser Code geht in der Tätigkeit B, auf die Login-Aktivität zu vermeiden, kommen zurück:
@Override
public void onBackPressed() {
moveTaskToBack(true);
super.onBackPressed();
}
Und dieser Code geht in der Tätigkeit, die die Logout-Funktion aufrufen:
public static void logout() {
Intent intent = new Intent(activity, LoginMain.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}