423 Stimmen

Beende alle vorherigen Aktivitäten

Meine Anwendung hat die folgenden Ablaufbilder:

Home->screen 1->screen 2->screen 3->screen 4->screen 5

Jetzt habe ich eine gemeinsame log out Schaltfläche in jedem Bildschirm

( Home/ screen 1 / screen 2 /screen 3/ screen 4 / screen 5 )

Ich möchte, dass, wenn der Benutzer auf die Schaltfläche "Abmelden" (von einem beliebigen Bildschirm) klickt, alle Bildschirme beendet werden und ein neuer Bildschirm Log in wird geöffnet.

Ich habe fast alle ausprobiert FLAG_ACTIVITY um dies zu erreichen. Ich gehe auch durch einige Antworten in Stackoverflow, aber nicht in der Lage, das Problem zu lösen. Meine Anwendung ist auf Android 1.6 so nicht in der Lage zu verwenden FLAG_ACTIVITY_CLEAR_TASK

Gibt es eine Möglichkeit, das Problem zu lösen?

604voto

DArkO Punkte 15470

Verwendung:

Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

Dadurch werden alle Aktivitäten über der Wohnung gelöscht.

Angenommen, Sie beenden den Anmeldebildschirm, wenn der Benutzer sich anmeldet und die Startseite erstellt wird, und danach alle Bildschirme von 1 bis 5 auf diesem einen. Der Code, den ich gepostet habe, bringt Sie zum Startbildschirm zurück, nachdem alle anderen Aktivitäten abgeschlossen sind. Sie können ein Extra in der Absicht hinzufügen und dieses in der Aktivität des Startbildschirms lesen und ihn ebenfalls beenden (vielleicht den Anmeldebildschirm von dort aus erneut starten oder so).

Ich bin mir nicht sicher, aber Sie können auch versuchen, sich mit dieser Flagge anzumelden. Ich weiß nicht, wie die Aktivitäten in diesem Fall geordnet werden. Ich weiß also nicht, ob dadurch die Aktivitäten unterhalb des Bildschirms, auf dem Sie sich gerade befinden, gelöscht werden, aber es ist auf jeden Fall der richtige Weg.

342voto

Kong Ken Punkte 3819

Sie können versuchen Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK . Dadurch werden alle vorherigen Aktivitäten vollständig gelöscht und neue Aktivitäten gestartet.

158voto

Henrique Punkte 4841

Bevor Sie Ihre neue Aktivität starten, fügen Sie einfach den folgenden Code ein:

finishAffinity();

Oder wenn Sie möchten, dass es in früheren Versionen von Android funktioniert:

ActivityCompat.finishAffinity(this);

39voto

Eric Leschinski Punkte 134271

Wenn der Benutzer alle offenen Aktivitäten beenden möchte Sie sollten eine Schaltfläche drücken, die die erste Aktivität lädt, die beim Starten Ihrer Anwendung ausgeführt wird, alle anderen Aktivitäten löschen und dann die letzte verbleibende Aktivität beenden lassen. Der folgende Code soll ausgeführt werden, wenn der Benutzer auf die Schaltfläche "Beenden" drückt. In meinem Fall, LoginActivity ist die erste Aktivität in meinem Programm, die ausgeführt wird.

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);

Der obige Code löscht alle Aktivitäten mit Ausnahme von LoginActivity . Dann fügen Sie den folgenden Code in die Datei LoginActivity 's onCreate(...) zu hören, wenn LoginActivity neu erstellt und das 'EXIT'-Signal übergeben wurde:

if (getIntent().getBooleanExtra("EXIT", false)) {
    finish();  
}

Warum ist es so schwer, eine Exit-Taste in Android zu erstellen?

Android versucht hartnäckig, Sie davon abzuhalten, eine Schaltfläche zum Beenden" in Ihrer Anwendung zu haben, weil sie wollen, dass der Benutzer sich nie darum kümmert, ob die Programme, die er benutzt, im Hintergrund laufen oder nicht.

Die Entwickler des Android-Betriebssystems möchten, dass Ihr Programm ein unerwartetes Herunterfahren und Ausschalten des Telefons übersteht, und dass der Benutzer beim Neustart des Programms genau dort weitermacht, wo er aufgehört hat. So kann der Benutzer einen Anruf erhalten, während er Ihre Anwendung verwendet, und Karten öffnen, was erfordert, dass Ihre Anwendung für weitere Ressourcen freigegeben wird.

Wenn der Benutzer Ihre Anwendung wieder aufnimmt, macht er ohne Unterbrechung genau dort weiter, wo er aufgehört hat. Diese Beenden-Schaltfläche entzieht dem Aktivitätsmanager Energie, was zu Problemen mit dem automatisch verwalteten Android-Programmlebenszyklus führen kann.

37voto

AkshayT Punkte 2643

Ich bin wohl spät dran, aber es gibt eine einfache und kurze Antwort. Es gibt eine finishAffinity()-Methode in Activity, die die aktuelle Aktivität und alle übergeordneten Aktivitäten beenden wird, aber es funktioniert nur in Android 4.1 oder höher.

Für API 16+, verwenden Sie

finishAffinity();

Für unter 16, verwenden Sie

ActivityCompat.finishAffinity(YourActivity.this);

Hoffentlich hilft das!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X