Ich möchte meine Anwendung schließen, damit sie nicht mehr im Hintergrund ausgeführt wird.
Wie geht das? Ist dies eine gute Praxis auf der Android-Plattform?
Wenn ich mich auf die Schaltfläche "Zurück" verlasse, wird die App geschlossen, bleibt jedoch im Hintergrund. Es gibt sogar eine Anwendung namens "TaskKiller", um diese Apps im Hintergrund zu beenden.
Antworten:
Android verfügt über einen Mechanismus zum sicheren Schließen einer Anwendung gemäß der Dokumentation. In der letzten Aktivität, die beendet wird (normalerweise die Hauptaktivität, die beim Start der Anwendung zum ersten Mal ausgeführt wurde), setzen Sie einfach ein paar Zeilen in die Methode onDestroy (). Der Aufruf von System.runFinalizersOnExit (true) stellt sicher, dass alle Objekte beim Beenden der Anwendung finalisiert und Müll gesammelt werden. Sie können eine Anwendung auch schnell über android.os.Process.killProcess (android.os.Process.myPid ()) beenden, wenn Sie dies bevorzugen. Der beste Weg, dies zu tun, besteht darin, eine Methode wie die folgende in eine Hilfsklasse einzufügen und sie dann aufzurufen, wenn die App beendet werden muss. Zum Beispiel in der Zerstörungsmethode der Root-Aktivität (vorausgesetzt, die App beendet diese Aktivität niemals):
Außerdem benachrichtigt Android eine Anwendung nicht über das HOME- Tastenereignis, sodass Sie die Anwendung nicht schließen können, wenn die HOME- Taste gedrückt wird. Android behält sich das HOME- Schlüsselereignis für sich vor, sodass ein Entwickler Benutzer nicht daran hindern kann, ihre Anwendung zu verlassen. Sie können jedoch mit der Bestimmung HOME - Taste durch Setzen eines Flags auf true in einer Hilfsklasse gedrückt wird, der, dass die übernimmt HOME - Taste gedrückt wurde, dann wird das Flag auf false zu ändern , wenn ein Ereignis , das zeigt , die auftritt HOME - Taste nicht gedrückt wurde und dann Überprüfen, ob die HOME- Taste in der onStop () -Methode der Aktivität gedrückt wurde .
Vergessen Sie nicht, die HOME- Taste für alle Menüs und für die Aktivitäten zu verwenden, die von den Menüs gestartet werden. Gleiches gilt für den SEARCH- Schlüssel. Nachfolgend einige Beispielklassen zur Veranschaulichung:
Hier ist ein Beispiel für eine Root-Aktivität, die die Anwendung beendet, wenn sie zerstört wird:
Hier ist eine abstrakte Aktivität, die erweitert werden kann, um den HOME- Schlüssel für alle Aktivitäten zu handhaben , die ihn erweitern:
Hier ist ein Beispiel für einen Menübildschirm, der die HOME- Taste behandelt:
Hier ist ein Beispiel für eine Hilfsklasse, die den HOME- Schlüssel in der gesamten App verarbeitet:
quelle
killApp()
, da Google angegeben hat, dass dies zu unvorhersehbarem Verhalten führen wird.JA! Sie können Ihre Anwendung mit Sicherheit schließen, damit sie nicht mehr im Hintergrund ausgeführt wird. Wie andere kommentiert haben,
finish()
ist der von Google empfohlene Weg, der nicht wirklich bedeutet, dass Ihr Programm geschlossen ist.Mit diesem
finish()
Befehl wird Ihre Anwendung geschlossen, sodass nichts im Hintergrund ausgeführt wird. Verwenden Sie dies jedoch mit Bedacht und lassen Sie keine Dateien offen, Datenbankhandles offen usw. Diese Dinge werden normalerweise über den Befehl bereinigt .Ich persönlich hasse es, wenn ich in einer Anwendung Beenden wähle und es nicht wirklich beendet wird.
quelle
So habe ich es gemacht:
Ich habe es gerade gesagt
Innerhalb der Methode, die eine Aktivität öffnet, und innerhalb der Methode von SOMECLASSNAME, mit der die von mir gesetzte App geschlossen werden soll:
Und ich habe folgendes in meine Hauptklasse aufgenommen:
quelle
Nur um meine eigene Frage jetzt nach so langer Zeit zu beantworten (da CommonsWare die beliebteste Antwort kommentierte und sagte, wir sollten dies NICHT tun):
Wenn ich die App beenden möchte:
FLAG_ACTIVITY_CLEAR_TOP
andere Aktivität, die sich derzeit am unteren Rand des Aktivitätsstapels befindet) mit (wodurch alle anderen danach gestarteten Aktivitäten beendet werden, dh alle). Stellen Sie einfach sicher, dass diese Aktivität im Aktivitätsstapel enthalten ist (beenden Sie sie aus irgendeinem Grund nicht im Voraus).finish()
zu dieser Aktivität aufDas ist es, funktioniert ganz gut für mich.
quelle
Schreiben Sie einfach diesen Code auf Ihre Schaltfläche EXIT-Klick.
Und in der onCreate () -Methode Ihrer MainActivity.class schreiben Sie den folgenden Code als erste Zeile:
quelle
Die Verwendung der Framework-APIs ist nicht möglich. Es liegt im Ermessen des Betriebssystems (Android), zu entscheiden, wann ein Prozess entfernt werden soll oder im Speicher verbleibt. Dies ist aus Effizienzgründen so: Wenn der Benutzer beschließt, die App neu zu starten, ist sie bereits vorhanden, ohne dass sie in den Speicher geladen werden muss.
Also nein, es ist
nicht nurentmutigt, es ist unmöglich, dies zu tun.quelle
Zum Beenden von App-Möglichkeiten:
Weg 1:
anrufen
finish();
und überschreibenonDestroy();
. Geben Sie den folgenden Code einonDestroy()
:oder
Weg 2:
Weg 3:
Weg 4:
Weg 5:
Manchmal wird beim Aufrufen
finish()
nur die aktuelle Aktivität beendet, nicht die gesamte Anwendung. Hierfür gibt es jedoch eine Problemumgehung. Jedes Mal, wenn Sie ein startenactivity
, starten Sie es mitstartActivityForResult()
. Wenn Sie die gesamte App schließen möchten, können Sie Folgendes tun:Definieren Sie dann den
onActivityResult(...)
Rückruf jeder Aktivität, sodass bei eineractivity
Rückgabe mit demRESULT_CLOSE_ALL
Wert auch Folgendes aufgerufen wirdfinish()
:quelle
So hat Windows Mobile für ... nun ... jemals funktioniert! Microsoft hat dazu Folgendes zu sagen:
http://blogs.msdn.com/windowsmobile/archive/2006/10/05/The-Emperor-Has-No-Close.aspx (ist es traurig, dass ich mich bis 2006 an den Titel des Blogposts erinnert habe? Ich habe den Artikel bei Google gefunden, indem ich nach "Der Kaiser hat keine Nähe" gesucht habe. Lol)
Zusamenfassend:
Viele Kommentare in dieser Frage bei O'Reilly deuten darauf hin, dass sich Android ähnlich verhält und Anwendungen schließt, die eine Weile nicht mehr verwendet wurden, nur wenn Android den von ihnen verwendeten Speicher benötigt.
Da dies eine Standardfunktion ist, würde eine Änderung des Verhaltens zum erzwungenen Schließen die Benutzererfahrung verändern. Viele Benutzer sind es gewohnt, ihre Android-Apps sanft zu schließen. Wenn sie also eine App mit der Absicht schließen, nach der Ausführung einiger anderer Aufgaben zu ihr zurückzukehren, sind sie möglicherweise eher frustriert darüber, dass der Status der Anwendung zurückgesetzt wird oder länger dauert öffnen. Ich würde mich an das Standardverhalten halten, weil es das ist, was erwartet wird.
quelle
Das Aufrufen der
finish()
Methode für eine Aktivität hat den gewünschten Effekt auf diese aktuelle Aktivität.quelle
Keine der oben genannten Antworten funktioniert gut in meiner App
Hier ist mein Arbeitscode
auf Ihrem Exit-Button:
Dieser Code dient dazu, alle anderen Aktivitäten zu schließen und MainActivity jetzt auf Ihrer MainActivity an die Spitze zu bringen:
quelle
Geben Sie eine
finish();
Erklärung wie folgt ab:In jeder Aktivität.
quelle
quelle
Kopieren Sie den folgenden Code und fügen Sie die Datei AndroidManifest.xml unter First Activity Tag ein.
Fügen Sie auch den folgenden Code in allen unter Activity Tag in der Datei AndroidManifest.xml hinzu
quelle
Nicht möglich mit 2.3. Ich habe viel gesucht und viele Apps ausprobiert. Die beste Lösung besteht darin, sowohl (go taskmanager) als auch (schneller Neustart) zu installieren. Wenn Sie sie zusammen verwenden, funktioniert es und gibt den Speicher frei. Eine weitere Option ist das Upgrade auf Android Ice Cream Sandwich 4.0.4, mit dem Apps gesteuert (geschlossen) werden können.
quelle
Ich wollte zum Startbildschirm meines Android-Geräts zurückkehren, also benutzte ich einfach:
quelle
Die Verwendung von
finishAffinity()
kann eine gute Option sein, wenn Sie alle Aktivitäten der App schließen möchten. Laut Android Docs-quelle
und im Manifest:
Dann können Sie anrufen
CloseAppActivity.closeApp(fromActivity)
und die Bewerbung wird geschlossen.quelle
Schreiben Sie einfach den folgenden Code in onBackPressed:
quelle
durch Aufrufen von finish (); in der OnClick-Taste oder im Menü
quelle
finish()
wird die App nicht beendet. Es kann zur vorherigen Absicht oder zum Hintergrund der App zurückkehren.Ich denke, es wird Ihre Aktivität und alle damit verbundenen Unteraktivitäten schließen.
quelle
Der beste und kürzeste Weg, um die Tabelle System.exit zu verwenden.
Die VM stoppt die weitere Ausführung und das Programm wird beendet.
quelle
Verwenden Sie "
this.FinishAndRemoveTask();
" - die Anwendung wird ordnungsgemäß geschlossenquelle