Как убить мою активность - трудный путь - PullRequest
15 голосов
/ 14 июля 2010

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

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

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

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

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

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

Ответы [ 8 ]

24 голосов
/ 08 февраля 2011
  1. Вызов finish (); при нажатии кнопки
  2. Добавить эту строку в метод onDestroy:

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

    public void onDestroy() {
        super.onDestroy();
        android.os.Process.killProcess(android.os.Process.myPid());
    }       
8 голосов
/ 14 июля 2010

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

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

Dalvik-процесс моего приложения все еще болтается как зомби в фон.

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

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

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

6 голосов
/ 14 июля 2010

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

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

Вам потребуется добавить разрешение KILL_BACKGROUND_PROCESSES в файл AndroidManifest.xml.

4 голосов
/ 25 января 2012

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

System.exit(0)

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

3 голосов
/ 26 сентября 2011

Завершив процесс, вы можете полностью остановить приложение. На последнем экране после нажатия кнопки «Назад» вы можете остановить процесс:

public void onBackPressed() {   
        super.onBackPressed();   
        int pid = android.os.Process.myPid();
        android.os.Process.killProcess(pid);    }
1 голос
/ 23 июля 2013

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

0 голосов
/ 19 марта 2013

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

0 голосов
/ 08 ноября 2011

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

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

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

...