Ich habe 4 Aktivitäten: Act1
, Act2
, Act3
und Act4
..__ Eine Schaltfläche in Act1 öffnet Act2, eine Schaltfläche in Act2 öffnet Act3, eine Schaltfläche in Act3 öffnet Act4.
Ich möchte zwei Dinge tun:
Ich habe eine Schaltfläche in Act4, die den Benutzer zu Act1 führt. Das Problem ist, wenn der Benutzer in Act1 zurückklickt. Ich möchte die App schließen, anstatt Act4 zu öffnen.
Ich habe eine Option im Menü 'Beenden' in allen Aktivitäten, wenn der Benutzer es auswählt. Ich möchte die App schließen, anstatt zur vorherigen Aktivität zurückzukehren.
Ich habe es mit finish();
versucht, aber es entsprach nicht meinen Anforderungen.
Verwenden Sie den folgenden Code in der Exit-Schaltfläche Ihres Act4
'th Menu.xml
-
Intent intent = new Intent(Act4.this, Act1.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
In der onCreate()
-Methode Ihrer ersten Aktivität fügen Sie einfach den folgenden Code ein
if (getIntent().getBooleanExtra("EXIT", false))
{
finish();
}
Dadurch wird Ihre App beendet.
Schauen Sie sich diesen Link an:
Sie können verwenden:
@Override
public void onBackPressed()
{
moveTaskToBack(true);
}
in allen Aktivitäten, um die App zu schließen.
beenden Sie die vorherige Aktivität, wenn Sie zur nächsten Aktivität wechseln möchten. Schreiben Sie finish();
nach startactivity(intent);
und schreiben Sie den folgenden Code für den Start der ersten Aktivität aus dem vierten Klickereignis der Schaltfläche "Button".
Intent in1=new Intent(Act4.this, Act1.class);
startActivity(in1);
finish();
Und schreiben Sie den folgenden Code auf das Click-Ereignis Ihres Exit-Buttons in allen Aktivitäten.
finish();
Intent intent = new Intent(Act4.this, Act1.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Deaktivieren Sie die Markierung, bevor Sie zur vorherigen Aktivität zurückkehren. Es könnte dir helfen.
Fügen Sie diesen Code in Ihre App ein:
moveTaskToBack(true);
Android.os.Process.killProcess(Process.myPid());
System.exit(1);
Verwenden Sie Android:noHistory = "true"
in Ihrer AndroidManifest.xml-Datei
<activity
Android:name=".Act1"
Android:noHistory="true" />
<activity
Android:name=".Act2"
Android:noHistory="true" />
<activity
Android:name=".Act3"
Android:noHistory="true" />
<activity
Android:name=".Act4"
Android:noHistory="true" />
Ich verwende diese Methode:
1. Erstellen Sie in der ersten Aktivität eine statische Aktivität, die das .__ schließt. verbleibende Tätigkeit (en).
2. Rufen Sie es dann in der statischen Methode auf, so wird die App von überall aus geschlossen.
public static Activity activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity=this;
}
public static void CloseApp(){
activity.finish();
}
Do a
<code>
try
{
finalize();
finish
}
catch(Exception error)
{
error.printStackTrace();
}
//This would exit your App neatly
</code>
Mein Ansatz ist, alle untergeordneten Aktivitäten mit startActivityForResult
zu starten. Dann kann ich putExtra ("STATE", some_value) beim Beenden eines beliebigen Kindes verwenden und den Zustandswert verwenden, um zu bestimmen, was durch die Eltern zu tun ist.
Wenn ich die App von einem tiefen Kind aus beenden möchte, wäre "STATE" "Exit" und jedes Kind in der Hierarchie würde einfach den StringExtra für "Exit" abrufen, ein PutExtra ("STATE", "Exit") ausführen und aufrufen finish () und dann würde die App am Ende finish () aufrufen. Damit können Sie einen beliebigen Zustand erreichen.
Die Verwendung von startActivityForResult zum Übergeben von Nachrichten auf diese Weise vermeidet, dass unbequeme Verweise an die untergeordneten Aktivitäten weitergegeben werden müssen, und vereinfacht die Einstellung des gewünschten Status der App.
Wenn Sie eine andere Aktivität hinter sich haben (im Anwendungsaktivitäts-Stack), können Sie mit finish()
die aktuelle Aktivität beenden.
Die back-Funktion setzt jedoch auch voraus, dass die aktuelle Aktivität von Ihrem Anwendungsaktivitätsstack entfernt wird.
Nach meiner Erfahrung ist es sehr unzuverlässig, sich auf die Aktivitäten im Back-Stack (im Application-Activity-Stack) zu verlassen. Aus diesem Grund habe ich jede Aktivität beendet, wenn ich tiefer gehe.
In Ihrem Fall:
Act 1 -> exit -> Act 2 -> exit -> Act 3 -> exit -> Act 4 -> exit -> Act 1 -> exit
Die obige Methode beendet alle Aktivitäten.
Wenn Sie jedoch etwas Code im Hintergrund ausführen möchten, ist es besser, sich auf einen "Dienst" als auf eine "Aktivität" zu verlassen. Sie können den "Service" beenden, nachdem Sie die zugewiesene Arbeit ausgeführt haben.