17 Stimmen

Wie man meine eigene Aktivität beendet - auf die harte Tour

Also habe ich meine Aktivität, und wenn ich auf einen "Beenden" -Button drücke, rufe ich Activity.finish() auf. Dies schließt meine Anwendung effektiv.

Das Problem: Der Dalvik-Prozess meiner Anwendung hängt immer noch als Zombie im Hintergrund herum. Es scheint, als wäre dies normal, da auch andere Anwendungen dasselbe tun. Selbst das "Hello-World"-Beispiel bleibt im Speicher hängen.

Ich könnte damit leben, aber leider macht dieses Verhalten die Entwicklung meiner Anwendung zu einer Qual. Ich habe einen Remote-Service, der mit meiner Aktivität verbunden ist, und dieser wird nicht entladen, solange meine Aktivität nicht entladen wird (was wie gesagt nie passiert).

Alles wird irgendwie ohne guten Grund am Leben gehalten.

Wie kann ich meine Aktivität wirklich aus dem Speicher entfernen?

Ich suche nach etwas wie einem Aufruf Activity.finish_and_kill_my_process_please() oder etwas Ähnlichem.

0voto

Krishna Prasad Punkte 673

Indem wir den ActivityManager verwenden, können wir auch andere Anwendungen schließen.

private ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
am.restartPackage("com.jimmy.appToBeClosed");

Um den obigen Code verwenden zu können, sollten die android.permission.RESTART_PACKAGE Berechtigungen in der Manifestdatei vorhanden sein.

0voto

PolyMesh Punkte 2090

Ähnlich wie System.exit(0) auf der Java-Seite können Sie auch eine native Methode während onDestroy aufrufen, die exit(0) auf der C/C++-Seite aufruft. Dies scheint die Bibliothek zum vollständigen Beenden zu zwingen. Es funktioniert für mich!

-1voto

Sergey Galin Punkte 386

System.exit() entlädt sofort die gesamte virtuelle Maschine mit allen nativen Bibliotheken, Diensten usw.

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