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.

26voto

bdhac Punkte 359
  1. Rufen Sie finish(); bei einem Klick auf den Button auf
  2. Fügen Sie diese Zeile zur onDestroy-Methode hinzu:

android.os.Process.killProcess(android.os.Process.myPid());

    public void onDestroy() {
        super.onDestroy();
        android.os.Process.killProcess(android.os.Process.myPid());
    }

7voto

CommonsWare Punkte 950864

Also ich habe meine Aktivität und beim Drücken einer "Beenden"-Schaltfläche rufe ich Aktivität.finish() auf. Dadurch wird das Anwendung geschlossen.

Bitte mach das nicht.

Der Dalvik-Prozess meiner Anwendung hängt immer noch als Zombie im Hintergrund.

Der Prozess wird im Cache gehalten, um möglicherweise von Android wiederverwendet zu werden. Du kannst ihn sicher ignorieren.

Ich habe einen Remote-Service, der mit meiner Aktivität verbunden ist, und dieser Service wird nicht entladen, bis meine Aktivität entladen wird (was wie gesagt niemals passiert).

Du hast wahrscheinlich einen Fehler in deiner Anwendung, wie zum Beispiel das Aufrufen von startService() und das Versäumnis, stopService() aufzurufen, oder das Aufrufen von bindService() und das Versäumnis, unbindService() aufzurufen.

6voto

Cristian Punkte 195886

Versuchen Sie, die Methode killBackgroundProcesses zu verwenden:

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses("Name.Ihrer.Paket");

Sie müssen die Berechtigung KILL_BACKGROUND_PROCESSES zu Ihrer AndroidManifest.xml Datei hinzufügen.

5voto

Midhun VP Punkte 641

Indem Sie den Prozess beenden, können Sie die Anwendung vollständig stoppen. Vom letzten Bildschirm aus können Sie den Prozess stoppen, indem Sie die Zurück-Taste drücken:

public void onBackPressed() {   
     super.onBackPressed();   
     int pid = android.os.Process.myPid();
     android.os.Process.killProcess(pid);   
}

3voto

Ahmet Ipkin Punkte 752

Nun, wenn Sie nicht nur die Aktivität, sondern auch die Anwendung beenden möchten, können Sie System.exit(0) verwenden

Die Leute sagen, dass es veraltet oder ein schlechtes Beispiel ist, aber nun ja, es ist reines Java und funktioniert...

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