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


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

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

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

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

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

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

8 15

8 ответов:

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

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

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

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

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

Возможно, в вашем приложении есть ошибка, например вызов startService() и невозможность вызова stopService(), или вызов bindService() и невозможность вызова unbindService().
  1. вызов финиш(); на кнопку нажмите
  2. Добавьте эту строку в метод onDestroy:

андроид.ос.Процесс.killProcess (android.ос.Процесс.myPid());

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

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

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

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

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

System.exit(0)

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

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

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

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

С помощью ActivityManager мы также можем закрыть другие приложения.

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

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

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