Рисунок 1 - Многие зомби были убиты во время исследования этого ответа
Не рекомендуется завершать процесс виртуальной машины Java приложения Android на уровне ОС. К сожалению, это именно то, что делает «стоп» окна устройства eclipse, как и System.exit () и команда оболочки «kill».
Это подрывает обычные методы жизненного цикла приложения, такие как onStop (), onDestroy () и finalize ().
Многие приложения требуют этих методов для плавного выхода (например, если они используют системные объекты, такие как Sensor, MediaPlayer, Equalizer, Visualizer и т. Д.).
Эти системные объекты держатся с мертвой хваткой зомби на системных ресурсах, если release () не вызывается явно во время этих методов жизненного цикла. См. Рис. 1 выше. Это может предотвратить перезапуск приложения и даже потребовать перезагрузки. Это неприятный аспект.
Единственное решение - убедиться, что вы всегда аккуратно выходите из приложения с помощью вызова onStop () или onDestroy () или, по крайней мере, finalize (). Отладчик делает это, как и ОС при выключении.
Вы можете настроить приложение на перехват событий SIG_HUP, чтобы принудительно выполнить плавный выход из командной строки.
Единственный раз, когда вы убиваете виртуальную машину приложения, находится в состоянии ANR (уже в состоянии зомби). Ошибки ANR должны быть исправлены. Никогда не развертывайте приложение, которое может войти в это состояние. Это очень грубо.
Вы можете использовать Google Analytics и Play Store, чтобы отслеживать их при развертывании. Вы же не хотите, чтобы рассерженные пользователи оставляли однозвездочные обзоры ANR после перезагрузки из-за вашего зомби-приложения. Очень плохо.
Помните, что Android - это Linux: относитесь к нему как к настоящей ОС и уважайте жизненный цикл приложения, иначе вы обязательно столкнетесь с ужасным зомби-апокалипсисом.
PS: Если вам не нравится аналогия с зомби, как насчет Fantasia?