Как убить собственную активность-трудный путь
Итак, у меня есть моя активность, и при нажатии кнопки "выйти" я вызываю активность.заканчивать(). Это эффективно закрывает мое приложение.
Проблема: Дальвик-процесс моего приложения все еще висит в фоновом режиме, как зомби. Кажется, что это нормально, так как другие приложения делают то же самое. Даже пример hello-world остается в памяти..
Я мог бы жить с этим, но, к сожалению, такое поведение делает развитие моего приложения болью. У меня есть пульт дистанционного управления. служба подключена к моей активности, и эта служба не будет выгружаться, пока не выгрузится моя активность (что, как уже было сказано, никогда не происходит).
Все каким-то образом сохраняется живым без всякой на то причины.
Как я могу действительно удалить свою активность из памяти?
Я ищу что-то вроде активности.вызов finish_and_kill_my_process_please () или что-то подобное.
8 ответов:
Итак, у меня есть моя активность, и по нажатию кнопка "Выход", которую я вызываю Деятельность.заканчивать(). Это эффективно закрывает мое заявление.
Дальвик-процесс моего применения все еще болтается как зомби в фон.
Процесс хранится в кэше, для возможного повторного использования Android. Вы можете спокойно игнорировать его.
Возможно, в вашем приложении есть ошибка, например вызовУ меня есть удаленный сервис, подключенный к моя деятельность и эта служба не будет разгружать, пока не выгрузится моя активность (что, как уже было сказано, никогда не происходит).
startService()
и невозможность вызоваstopService()
, или вызовbindService()
и невозможность вызоваunbindService()
.
- вызов финиш(); на кнопку нажмите
- Добавьте эту строку в метод 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
в файле манифеста.