Ich habe einige Codes gefunden, um eine Android-Anwendung programmgesteuert zu beenden. Wenn Sie einen der folgenden Codes in onDestroy () aufrufen, wird die Anwendung dann vollständig beendet?
System.runFinalizersOnExit(true)
(ODER)android.os.Process.killProcess(android.os.Process.myPid());
Ich möchte meine Anwendung nicht im Hintergrund ausführen, nachdem ich auf die Schaltfläche "Beenden" geklickt habe. Bitte schlagen Sie mir vor, kann ich einen dieser Codes verwenden, um meine App zu beenden? Wenn ja, welchen Code kann ich verwenden? Ist es eine gute Möglichkeit, die App in Android zu beenden?
Antworten:
Seit API 16 können Sie die Methode finishAffinity verwenden, die dem Schließen aller zugehörigen Aktivitäten durch ihren Namen und die Javadoc-Beschreibung ziemlich nahe zu kommen scheint:
this.finishAffinity ();
Seit API 21 können Sie einen sehr ähnlichen Befehl verwenden
finishAndRemoveTask ();
quelle
System.exit(0);
. Vielen Dank für Ihre Antwort! Endlich habe ich eine anständige Lösung gefunden.System.exit(0)
ist dies die einzige Lösung, die für mich funktioniert hat.Dies ist der beste Weg, um Ihre App zu beenden. !!!
Die beste Lösung für mich.
quelle
System.exit(0);
. Die richtige Lösung wurde von @sivi gepostet (seine Antwort ist oben)finishAffinity();
System.exit(0);
Wenn Sie nur verwenden,
finishAffinity();
ohne dassSystem.exit(0);
Ihre Anwendung beendet wird, der zugewiesene Speicher jedoch weiterhin von Ihrem Telefon verwendet wird, verwenden Sie beide. Wenn Sie eine App sauber und wirklich beenden möchten, verwenden Sie beide.Dies ist die einfachste Methode und funktioniert überall. Beenden Sie die App wirklich. Sie können eine Menge Aktivitäten öffnen, die alle problemlos beenden.
Beispiel auf einen Button klicken
oder wenn Sie etwas Nettes wollen, zum Beispiel mit einem Warndialog mit 3 Tasten JA NEIN und ABBRECHEN
quelle
System.exit(0);
Sie sollten diesen Speicher nicht freigeben, das System erledigt dies bei Bedarf für Sie. Dies ist das beabsichtigte Verhalten.Denken Sie bitte genau darüber nach, ob Sie die Anwendung beenden müssen: Lassen Sie das Betriebssystem herausfinden, wo und wann die Ressourcen freigegeben werden sollen.
Andernfalls, wenn Sie absolut sicher sind, verwenden Sie
Als Reaktion auf den Kommentar von @dave appleton: Lesen Sie als erstes die große Frage / Antwort-Kombination @gabriel: Wird das Beenden einer Anwendung verpönt?
Unter der Annahme, dass wir das haben, hat die Frage hier immer noch eine Antwort: Der Code, den Sie benötigen, wenn Sie etwas mit dem Beenden tun, ist
finish()
. Natürlich können Sie mehr als eine Aktivität usw. usw. haben, aber das ist nicht der Punkt. Lassen Sie uns einige Anwendungsfälle ausführenAm Ende tötet
finish()
natürlich nicht alles, aber es ist immer noch das Werkzeug, das Sie brauchen, denke ich. Wenn es einen Anwendungsfall für "Alle Aktivitäten töten" gibt, habe ich ihn noch nicht gefunden.quelle
finish()
wird die Anwendung nicht beendet.finish()
wird ständig verwendet:Call this when your activity is done and should be closed.
Es ist der gleiche Effekt wie das Drücken der "Zurück" -Taste.Activity
(nicht dasApplication
) zu "beenden" oder "zu töten" . Beispielsweise können Sie eine neue Aktivität starten, um dem Benutzer einige Informationen anzuzeigen. Nach einer Zeitüberschreitung oder durch Drücken von 'OK' können Sie anrufenfinish()
, um zur anrufenden Aktivität zurückzukehren.Ich denke, dass die Anwendung in einigen Fällen töten sollte. Zum Beispiel gibt es eine App, die erst nach dem Login verwendet werden kann. Die Anmeldeaktivität verfügt über zwei Schaltflächen: "Anmelden" und "Abbrechen". Wenn Sie auf die Schaltfläche "Abbrechen" klicken, bedeutet dies definitiv "App beenden". Niemand möchte, dass die App im Hintergrund lebt. Daher stimme ich zu, dass in einigen Fällen die App heruntergefahren werden muss.
quelle
Erstellen Sie ein
ExitActivity
und deklarieren Sie es im Manifest. Und fordern SieExitActivity.exit(context)
zum Beenden der App auf.quelle
In Android wird keine Anwendung beendet . SampleActivity.this.finish (); beendet die aktuelle Aktivität.
Wenn Sie von einer Aktivität zu einer anderen wechseln, beenden Sie die vorherige
quelle
Zuallererst erfordert dieser Ansatz mindestens Api 16.
Ich werde diese Lösung in drei Teile teilen, um dieses Problem weiter zu lösen.
1. Wenn Sie die Anwendung in einer Aktivität beenden möchten, verwenden Sie diesen Codeausschnitt:
2. Wenn Sie die Anwendung in einer Nicht-Aktivitätsklasse beenden möchten, die Zugriff auf Aktivität hat, verwenden Sie diesen Codeausschnitt:
3. Wenn Sie die Anwendung in einer Nicht-Aktivitätsklasse beenden möchten und nicht auf Aktivitäten wie Service zugreifen können, empfehle ich Ihnen, BroadcastReceiver zu verwenden. Sie können diesen Ansatz allen Ihren Aktivitäten in Ihrem Projekt hinzufügen.
Erstellen Sie die Instanzvariablen LocalBroadcastManager und BroadcastReceiver. Sie können getPackageName () + ". Closeapp" ersetzen, wenn Sie möchten.
Fügen Sie diese der onCreate () -Methode hinzu.
Vergessen Sie auch nicht, den Empfänger bei der onDestroy () - Aktivitätsmethode abzumelden
Zum Beenden der Anwendung müssen Sie Broadcasts mit LocalBroadcastManager senden, den ich in meiner PlayService-Klasse verwende, die Service erweitert.
quelle
Sie können
finishAndRemoveTask ()
von API 21 verwendenquelle
Dies hängt davon ab, wie schnell Sie Ihre App schließen möchten.
Ein sicherer Weg, um Ihre App zu schließen, ist finishAffinity ();
Es schließt Ihre App, nachdem alle Prozesse die Verarbeitung abgeschlossen haben. Dies kann einige Zeit dauern. Wenn Sie Ihre App auf diese Weise schließen und nach kurzer Zeit neu starten, wird Ihre neue Anwendung möglicherweise im selben Prozess ausgeführt. Mit allen nicht abgeschlossenen Prozessen und Singleton-Objekten der alten Anwendung.
Wenn Sie sicher sein möchten, dass Ihre App vollständig geschlossen ist, verwenden Sie System.exit (0).
Dadurch wird Ihre App sofort geschlossen. Es ist jedoch möglich, dass Sie Dateien beschädigen, die Ihre App geöffnet hat, oder dass eine Bearbeitung der freigegebenen Einstellungen nicht abgeschlossen wird. Gehen Sie also vorsichtig damit um.
Wenn Sie Watchdog in Kombination mit einer lang laufenden Aufgabe verwenden, können Sie die Einflüsse der verschiedenen Methoden erkennen.
Dadurch wird Ihre App nach 2 Sekunden beendet, ohne dass ein ANR-Dialogfeld oder ähnliches angezeigt wird. Wenn Sie System.exit (0) entfernen , diesen Code ausführen und die App nach dem Schließen neu starten, tritt ein seltsames Verhalten auf, da die Endlosschleife noch ausgeführt wird.
quelle
Sie sollten besser verwenden,
finish()
wenn Sie in sindActivity
, odergetActivity().finish()
wenn Sie in der sindFragment
.Wenn Sie die App vollständig beenden möchten, verwenden Sie:
quelle
Einfache und einfache Möglichkeit, die Anwendung zu beenden
quelle
Ich denke, was Sie suchen, ist dies
quelle
quelle
Wir wollen Code, der robust und einfach ist. Diese Lösung funktioniert auf alten und neueren Geräten.
quelle
Ähnlich wie @MobileMateo, aber in Kotlin
quelle
Ich bin mir nicht sicher, ob dies verpönt ist oder nicht, aber so mache ich es ...
Schritt 1 - Normalerweise habe ich eine Klasse, die Methoden und Variablen enthält, auf die ich global zugreifen möchte. In diesem Beispiel werde ich es die "App" -Klasse nennen. Erstellen Sie für jede Aktivität Ihrer App eine statische Aktivitätsvariable innerhalb der Klasse. Erstellen Sie dann eine statische Methode namens "close", die die
finish()
Methode für jede dieser Aktivitätsvariablen ausführt, wenn sie NICHT null sind . Wenn Sie eine Haupt- / Elternaktivität haben, schließen Sie diese zuletzt:Schritt 2 - Überschreiben Sie in jeder Ihrer Aktivitäten die Methoden
onStart()
undonDestroy()
. InonStart()
, setzen die statische Variable in Ihrer App - Klasse „gleichthis
“. InonDestroy()
setzen Sie es gleichnull
. Zum Beispiel in der Klasse "Activity1":Schritt 3 - Wenn Sie Ihre App schließen möchten, rufen Sie einfach an
App.close()
von überall an. Alle instanziierten Aktivitäten werden geschlossen! Da Sie nur Aktivitäten schließen und die App selbst nicht beenden (wie in Ihren Beispielen), kann Android von dort aus übernehmen und alle erforderlichen Bereinigungen vornehmen.Auch hier weiß ich nicht, ob dies aus irgendeinem Grund verpönt wäre. Wenn ja, würde ich gerne Kommentare darüber lesen, warum es so ist und wie es verbessert werden kann!
quelle
api>=16
EinsatzfinishAffinity()
anderes verwenden diese Methode.Ist das Beenden einer Bewerbung verpönt? . Gehen Sie über diesen Link. Es beantwortet Ihre Frage. Das System erledigt das Beenden einer Anwendung.
Angenommen, Sie haben zwei Aktivitäten A und B. Sie navigieren von A nach B. Wenn Sie auf die Schaltfläche Zurück klicken, wird Ihre Aktivität B aus dem Backstack entfernt und zerstört. Vorherige Aktivität in Backstack-Aktivität A steht im Mittelpunkt.
Sie sollten es dem System überlassen, zu entscheiden, wann die Anwendung beendet werden soll.
öffentliche Leere
finish()
Rufen Sie dies an, wenn Ihre Aktivität abgeschlossen ist und geschlossen werden sollte.
Angenommen, Sie haben viele Aktivitäten. Sie können die Aktionsleiste verwenden. Klicken Sie auf das Startsymbol, um zur Hauptaktivität Ihrer Anwendung zu navigieren. Klicken Sie in MainActivity auf die Schaltfläche Zurück, um die Anwendung zu beenden.
quelle
Um Ihre Anwendung zu beenden, können Sie Folgendes verwenden:
Um auch die Dienste zu stoppen, rufen Sie die folgende Methode auf:
quelle
Dies kann sehr spät sein und auch gemäß den Richtlinien sollten Sie den Lebenszyklusprozess nicht selbst erledigen (wie das Betriebssystem dies für Sie erledigt). Ein Vorschlag wäre, dass Sie einen Rundfunkempfänger in all Ihren Aktivitäten mit "
finish()
" in derenonReceive()
& registrieren, und wann immer Sie beenden möchten, können Sie einfach eine Absicht übergeben, die angibt, dass alle Aktivitäten beendet werden müssen ..... Obwohl Sie dies sicherstellen müssen " Heben Sie die Registrierung des Empfängers in IhrenonDestroy()
Methoden auf.quelle
Es ist keine gute Entscheidung, da sie gegen die Anwendungsverarbeitungsprinzipien von Android verstößt. Android beendet keinen Prozess, es sei denn, dies ist absolut unvermeidlich. Dies hilft Apps, schneller zu starten, da sie immer im Speicher bleiben. Sie benötigen also einen ganz besonderen Grund, um den Prozess Ihrer Bewerbung abzubrechen.
quelle
Die richtige und genaue Lösung, um die App beim Klicken auf die Schaltfläche zu beenden ist der folgende Code:
// On Button Zurück gedrücktes Ereignis
quelle
Wenn Sie Kotlin verwenden,
System.exit()
ist eine integrierte Methode der richtige Weg, um die App zu beendenSiehe die Dokumentation .
Die Zahl
0
als Parameter bedeutet, dass der Exit beabsichtigt ist und kein Fehler aufgetreten ist.quelle
Dies wird alles töten;)
quelle
Versuche dies
quelle
Der einfachste Weg, eine Anwendung aus einer Aktivität zu beenden, ohne die Logik von Android zu brechen und ohne mehr Code in vorhandene Aktivitäten einzufügen und Extras zu übergeben, ist der folgende:
das
QuitApplicationActivity
Wesen:quelle
Die Antwort von @Sivi schließt die App. Wenn Sie jedoch bei der Rückkehr einige untergeordnete Aktivitäten haben, wird möglicherweise eine andere unvollendete Aktivität geöffnet. Ich
noHistory:true
habe meine Aktivitäten erweitert, damit die App bei der Rückkehr von MainActivity startet.quelle
Nur um eine zur Liste der brutalen Methoden zum Beenden einer App hinzuzufügen:
Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);
quelle
Process.killProcess(Process.myPid())
macht das gleiche, ist aber kürzerSie können Ihre vollständigen Apps beenden. somit
es wird 100% funktionieren. Viel Glück!
quelle
Verwenden Sie einfach finish () für die Zurück-Taste. Drücken Sie onKeypressed ()
quelle