Как убить мою собственную деятельность - трудный путь
Итак, у меня есть моя активность, и при нажатии кнопки "Выход" я вызываю 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() мгновенно выгружает всю виртуальную машину со всеми родными библиотеками, службами и т.д.