412 Stimmen

Wie man eine Android-Anwendung programmatisch beendet

Ich habe einige Codes zum programmgesteuerten Beenden einer Android-Anwendung gefunden. Wenn ich einen der folgenden Codes in onDestroy() aufrufe, wird dann die Anwendung vollständig beendet?

  1. System.runFinalizersOnExit(true)
    (OR)
  2. android.os.Process.killProcess(android.os.Process.myPid());

Ich möchte nicht, dass meine Anwendung im Hintergrund läuft, nachdem ich auf die Schaltfläche "Beenden" geklickt habe. Bitte informieren Sie mich, ob ich einen dieser Codes verwenden kann, um meine Anwendung zu beenden? Wenn ja, welchen Code kann ich verwenden? Ist es ein guter Weg, um die Anwendung in Android zu beenden?

542voto

sivi Punkte 9816

Seit API 16 können Sie die finishAffinity-Methode verwenden, die ihrem Namen und ihrer Javadoc-Beschreibung nach dem Schließen aller damit verbundenen Aktivitäten recht nahe zu kommen scheint:

this.finishAffinity();

Erledigen Sie diese Aktivität sowie alle unmittelbar darunter liegenden Aktivitäten in der aktuellen Aufgabe, die dieselbe Affinität haben. Dies wird typischerweise verwendet, wenn eine Anwendung in einer anderen Aufgabe gestartet werden kann (z. B. aus einer ACTION_VIEW eines Inhaltstyps, den sie versteht) und der Benutzer die Aufwärtsnavigation verwendet hat, um aus der aktuellen Aufgabe in seine eigene Aufgabe zu wechseln. Wenn der Benutzer in diesem Fall nach unten zu anderen Aktivitäten der zweiten Anwendung navigiert hat, sollten alle diese Aktivitäten als Teil des Aufgabenwechsels aus der ursprünglichen Aufgabe entfernt werden.

Beachten Sie, dass dieser Abschluss es Ihnen nicht erlaubt, Ergebnisse an die vorherige Aktivität zu liefern, und dass eine Ausnahme ausgelöst wird, wenn Sie dies versuchen.

Da 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.

175voto

Ashton Punkte 2368
getActivity().finish();
System.exit(0);

Das ist der beste Weg, die App zu verlassen!!!

Die beste Lösung für mich.

74voto

Cristian Babarusi Punkte 1247

finishAffinity();

System.exit(0);

Wenn Sie nur finishAffinity(); ohne System.exit(0); Ihre Anwendung wird beendet, aber der zugewiesene Speicher wird weiterhin von Ihrem Telefon verwendet. Wenn Sie also eine Anwendung wirklich sauber beenden möchten, sollten Sie beide Möglichkeiten nutzen.

Dies ist die einfachste Methode und funktioniert überall, beenden Sie die App für echte, können Sie eine Menge von Aktivitäten geöffnet haben wird immer noch beenden alle ohne Problem.

Beispiel bei Klick auf eine Schaltfläche

public void exitAppCLICK (View view) {

    finishAffinity();
    System.exit(0);

}

oder wenn Sie etwas Schönes wollen, z.B. einen Warndialog mit 3 Schaltflächen YES NO und CANCEL

// alertdialog for exit the app
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

// set the title of the Alert Dialog
alertDialogBuilder.setTitle("your title");

// set dialog message
alertDialogBuilder
        .setMessage("your message")
        .setCancelable(false)
        .setPositiveButton("YES"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // what to do if YES is tapped
                        finishAffinity();
                        System.exit(0);
                    }
                })

        .setNeutralButton("CANCEL"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // code to do on CANCEL tapped
                        dialog.cancel();
                    }
                })

        .setNegativeButton("NO"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // code to do on NO tapped
                        dialog.cancel();
                    }
                });

AlertDialog alertDialog = alertDialogBuilder.create();

alertDialog.show();

31voto

Nanne Punkte 63372

Bitte denken Sie gründlich darüber nach, ob Sie die Anwendung wirklich beenden müssen: Warum überlassen Sie es nicht dem Betriebssystem, herauszufinden, wo und wann es die Ressourcen freigeben soll?

Andernfalls, wenn Sie sich wirklich sicher sind, verwenden Sie

finish();

Als Reaktion auf den Kommentar von @dave appleton: Lies als erstes die große Frage/Antwort-Kombination, die @gabriel gepostet hat: Ist es verpönt, eine Bewerbung abzubrechen?

Angenommen, wir haben das, dann hat die Frage immer noch eine Antwort, denn der Code, den Sie brauchen, wenn Sie etwas mit Beenden machen, ist finish() . Natürlich können Sie mehr als eine Aktivität usw. haben, aber das ist nicht der Punkt. Lassen Sie uns einige der Anwendungsfälle durchgehen

  1. Sie wollen, dass der Benutzer wegen des Speicherverbrauchs alles beendet und "nicht im Hintergrund läuft"? Das ist zweifelhaft. Lassen Sie den Benutzer bestimmte Aktivitäten im Hintergrund stoppen, aber lassen Sie das Betriebssystem alle nicht benötigten Ressourcen beenden.
  2. Sie möchten, dass ein Nutzer nicht zur vorherigen Aktivität Ihrer App wechselt? Dann konfigurieren Sie es entweder so, dass es nicht funktioniert, oder Sie brauchen eine zusätzliche Option. Wenn die meiste Zeit die Zurück=Vorherige-Aktivität funktioniert, würde der Benutzer dann nicht einfach auf Home drücken, wenn er/sie etwas anderes tun möchte?
  3. Wenn Sie eine Art Reset benötigen, können Sie herausfinden, ob/wie/etc. Ihre Anwendung beendet wurde, und wenn Ihre Aktivität wieder in den Fokus gerät, können Sie darauf reagieren, indem Sie einen neuen Bildschirm anzeigen, anstatt dort neu zu starten, wo Sie waren.

Also am Ende, natürlich, finish() tötet zwar nicht alles, aber ich denke, es ist trotzdem das richtige Werkzeug. Wenn es einen Anwendungsfall für "alle Aktivitäten beenden" gibt, habe ich ihn noch nicht gefunden.

24voto

vivek Punkte 964

Erstellen einer ExitActivity und verkünden es offenkundig. Und rufen ExitActivity.exit(context) zum Beenden der Anwendung.

public class ExitActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        finish();
    }

    public static void exit(Context context) {
        Intent intent = new Intent(context, ExitActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        context.startActivity(intent);
    }

}

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