Как убить мою собственную деятельность - трудный путь

Итак, у меня есть моя активность, и при нажатии кнопки "Выход" я вызываю Activity.finish(). Это фактически закрывает мое приложение.

Проблема: Dalvik-процесс моего приложения по-прежнему висит вокруг как зомби в фоновом режиме. Кажется, что это нормально, так как другие приложения делают то же самое. Даже пример hello-world висит вокруг в памяти.

Я мог бы жить с этим, но, к сожалению, это поведение делает развитие моего приложения болью. У меня есть удаленная служба, связанная с моей деятельностью, и эта служба не будет разгружаться до тех пор, пока моя активность не выгрузится (что, как сказано, никогда не будет).

Все как-то поддерживается живым без уважительной причины.

Как я могу удалить свою активность из памяти?

Я ищу что-то вроде вызова Activity.finish_and_kill_my_process_please() или чего-то подобного.

Ответы

Ответ 1

Итак, у меня есть моя деятельность, и при нажатии кнопка "Выход", которую я вызываю Activity.finish(). Это эффективно закрывает мое приложение.

Пожалуйста, не делайте этого.

Дальвик-процесс моей заявки все еще висит вокруг как зомби в фон.

Процесс хранится в кеше для потенциального повторного использования Android. Вы можете смело игнорировать его.

У меня есть удаленная служба, подключенная к моя деятельность, и эта услуга не будет разгрузиться, пока моя активность не выгрузится (который, как сказано, никогда не делает).

Вероятно, у вас есть ошибка в вашем приложении, например вызов startService() и невозможность вызвать stopService(), или вызов bindService() и неспособность вызвать unbindService().

Ответ 2

  • Вызов finish(); при нажатии кнопки
  • Добавьте эту строку к методу onDestroy:

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

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

Ответ 3

Попробуйте использовать метод killBackgroundProcesses:

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses("name.of.your.package");

Вам нужно будет добавить KILL_BACKGROUND_PROCESSES в ваш файл AndroidManifest.xml.

Ответ 4

Ну, если не только активность, но и приложение, которое вы хотите завершить, вы можете использовать

System.exit(0)

Люди говорят, что это устаревший или плохой пример, но, ну, это чистая Java и работает...

Ответ 5

Убив процесс, вы можете полностью остановить приложение. На последнем нажатии кнопки "Назад" вы можете убить процесс:

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

Ответ 6

Подобно System.exit(0) на стороне Java, вы также можете вызвать собственный метод во время onDestroy, который вызывает exit (0) на стороне C/С++. Кажется, это вынуждает lib выйти полностью. Это работает для меня!

Ответ 7

Используя ActivityManager, мы также можем закрыть другие приложения.

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

для использования вышеуказанного кода должны иметь разрешения android.permission.RESTART_PACKAGE в файле манифеста.

Ответ 8

System.exit() мгновенно выгружает всю виртуальную машину со всеми родными библиотеками, службами и т.д.