Ich bin sicher, dass diese Frage mehrmals gestellt wurde, weil ich einige gelesen habe. Mein Kunde möchte, dass ich eine Schaltfläche in seine App stecke, in der Benutzer klicken und das Programm beenden können. Ich habe this gelesen und festgestellt, dass der Aufruf von finish()
es tut. Aber das Ziel schließt nur die laufende Aktivität, oder? Ich habe viele Aktivitäten, also muss ich in diesem Fall jede Instanz jeder Aktivität passieren und sie beenden oder jede Aktivität in das Singleton-Muster bringen.
Ich habe auch erfahren, dass Activity.moveTaskToBack(true)
Sie in den Startbildschirm bringen kann. OK, das schließt nicht ab, sondern den Prozess als Hintergrund. Ist das also effektiv?
Welche Methode sollte ich verwenden, um die App vollständig zu schließen? Eine der oben beschriebenen oder eine andere Methode/sonstige Verwendung der oben genannten Methoden?
Tatsächlich sucht jeder nach dem Schließen der Anwendung bei einem Onclick-Ereignis, wo immer es Aktivitäten gibt.
Also versuchen Freunde, diesen Code. Setzen Sie diesen Code in das Ereignis "onclick"
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
Sie können System.exit () aufrufen. aus allen Aktivitäten herauskommen.
submit=(Button)findViewById(R.id.submit);
submit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Android.os.Process.killProcess(Android.os.Process.myPid());
System.exit(1);
}
});
Wenn Sie Ihre Anwendung beenden möchten, verwenden Sie diesen Code in Ihrem Ereignis mit gedrückter Taste:
public void onBackPressed() {
moveTaskToBack(true);
Android.os.Process.killProcess(Android.os.Process.myPid());
System.exit(1);
}
@Override
public void onBackPressed() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setTitle("Exit Application?");
alertDialogBuilder
.setMessage("Click yes to exit!")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
moveTaskToBack(true);
Android.os.Process.killProcess(Android.os.Process.myPid());
System.exit(1);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
Es ist viel zu einfach. Verwenden Sie System.exit(0);
Zufällig gibt es zwei mögliche Situationen:
Sie können die Aktivität mit folgendem Code beenden:
var intent = new Intent(Intent.ActionMain);
intent.AddCategory(Intent.CategoryHome);
intent.SetFlags(ActivityFlags.NewTask);
startActivity(intent);
finish();
Die zugrunde liegenden Aktivitäten in derselben Anwendung werden dadurch jedoch nicht beendet. Dies verringert nur die Anwendung.
Wenn Sie die Anwendung beenden möchten, beenden Sie den Prozess mit dem folgenden Code:
Android.os.Process.killProcess(Android.os.Process.myPid());
für Mono-Entwicklung einfach verwenden
process.KillProcess(Process.MyPid());
Seit Api 16 können Sie die finishAffinity-Methode verwenden, die dem Schließen und Schließen aller zugehörigen Aktivitäten mit Namen und Javadoc-Beschreibung ziemlich nahe zu sein scheint:
this.finishAffinity();
Beenden Sie diese Aktivität sowie alle unmittelbar darunter liegenden Aktivitäten in der aktuellen Aufgabe, die die gleiche Affinität aufweisen. Dies wird normalerweise verwendet, wenn eine Anwendung für eine andere Task gestartet werden kann (z. B. von einem ACTION_VIEW eines Inhaltstyps, den sie versteht) und der Benutzer die Aufwärtsnavigation verwendet hat, um von der aktuellen Task zu wechseln und zu seiner eigenen Task zu wechseln. In diesem Fall sollten alle diese Aktivitäten aus der ursprünglichen Aufgabe entfernt werden, wenn der Benutzer sich in andere Aktivitäten der zweiten Anwendung bewegt hat.
Beachten Sie, dass Sie mit dieser Ausführung keine Ergebnisse für die vorherige Aktivität liefern können. Wenn Sie dies versuchen, wird eine Ausnahme ausgelöst.
Seit api 21 können Sie einen sehr ähnlichen Befehl verwenden
finishAndRemoveTask();
Beendet alle Aktivitäten in dieser Aufgabe und entfernt sie aus der Liste der letzten Aufgaben.
Alternativen:
getActivity().finish();
System.exit(0);
int pid = Android.os.Process.myPid();
Android.os.Process.killProcess(pid);
Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);
Intent i = new Intent(context, LoginActivity.class);
i.putExtra(EXTRA_EXIT, true);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(i);
Quelle: So beenden Sie die Android-Anwendung programmgesteuert
Ich hoffe es hilft! Viel Glück!
Android.os.Process.killProcess(Android.os.Process.myPid());
Wie wäre es mit this.finishAffinity()
Aus den Dokumenten,
Beenden Sie diese Aktivität sowie alle unmittelbar darunter liegenden Aktivitäten in der aktuellen Task, die die gleiche Affinität aufweisen. Dies wird normalerweise verwendet, wenn eine Anwendung mit einer anderen Task gestartet werden kann (z. B. von einem ACTION_VIEW eines Inhaltstyps, den sie versteht) und der Benutzer die Aufwärtsnavigation verwendet hat, um von der aktuellen Task zur eigenen Task zu wechseln. Wenn der Benutzer in andere Aktivitäten der zweiten Anwendung nach unten gefahren ist, sollten alle diese als Teil des Taskwechsels aus der ursprünglichen Task entfernt werden. Beachten Sie, dass Sie mit dieser Ausführung keine Ergebnisse für die vorherige Aktivität liefern können. Wenn Sie dies versuchen, wird eine Ausnahme ausgelöst.
Verwenden Sie this.finishAffinity (); auf dieser Schaltfläche anstelle von finish (); Wenn es nicht funktioniert, können Sie auch versuchen, Android hinzuzufügen: noHistory = "true" in Ihrem Manifest und beenden Sie dann Ihre Aktivität mit uisng finish (); oder finishAffinity ();
Ich hoffe es hilft....:)
@Override
public void onBackPressed() {
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
}
Versuchen Sie dies bei einem Anruf. Ich benutze es manchmal in einem Klick auf eine Schaltfläche.
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Anstatt Ihre App zu schließen, wird das Dashboard geöffnet, so dass Ihre App geschlossen wird.
lesen Sie diese Frage für mehr Klarheit Android - Anwendungscode beenden
In Xamarin.Android erreichen:
public override void OnBackPressed()
{
MoveTaskToBack(true);
Process.KillProcess(Process.MyPid());
Environment.Exit(1);
}
dadurch wird Task (Stapel von Aktivitäten) gelöscht und mit der neuen Task begonnen
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(1);
Es funktioniert nur mit moveTaskToBack(true);
fügen Sie dieses in Ihr onClic ein:
moveTaskToBack(true);
finish()
ghost-Aktivität, die mit singletop und finish () von onCreate aufgerufen wird, sollte den Trick ausführen
Wenn sich noch jemand wundert, für Xamarin.Android (in meinem Fall läuft auch Monogame) läuft der Befehl FinishAndRemoveTask()
auf Activity
sehr gut!
Anstelle von System.exit (1) Verwenden Sie einfach System.exit (0).
Wenn Sie sowohl Beenden als auch Beenden verwenden, wird Ihre App vollständig geschlossen
fertig();
System.exit (0);
verwenden Sie einfach den Code in Ihrem Backpress
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
Wenn Sie in Ihrer Anwendung EventBus (oder eigentlich eine andere Pub-/Unterbibliothek) zur Kommunikation zwischen Aktivitäten verwenden, können Sie ihnen ein explizites Ereignis senden:
final public class KillItWithFireEvent
{
public KillItWithFireEvent() {}
public static void send()
{
EventBus.getDefault().post(new KillItWithFireEvent());
}
}
Der einzige Nachteil ist, dass Sie alle Aktivitäten benötigen, um sich dieses Ereignis anzuhören und ihre eigene finish()
zu nennen. Zu diesem Zweck können Sie auf einfache Weise shim - Aktivitätsklassen durch Vererbung erstellen, die nur dieses Ereignis abhören und Unterklassen alles andere implementieren lassen und dann sicherstellen, dass alle Ihre Aktivitäten von dieser zusätzlichen Ebene erben. Die Kill-Listener könnten durch Überschreibungen sogar zusätzliche Funktionen hinzufügen, z. B. den Tod in bestimmten Situationen vermeiden.
im fragment
getActivity (). finishAndRemoveTask ();
in der Aktivität
finishAndRemoveTask ();
Just call these two Function
finish();
moveTaskToBack(true);
füge einfach diesen Code hinzu: -
@Override
public void onBackPressed() {
finish();
super.onBackPressed();
}
Führen Sie einfach die beiden unteren Zeilen aus, wenn Sie die Anwendung beenden möchten
Android.os.Process.killProcess(Android.os.Process.myPid());
System.exit(1);