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

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

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

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

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

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

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

Solutions Collecting From Web of "Как убить мою собственную деятельность – трудный путь"

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

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

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

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

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

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

  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()); } 

Попробуйте использовать метод 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); } 

Подобно System.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 в файле манифеста.

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