Вы, очевидно, нашли нужный ответ в команде finish (). Это не удалит ваше приложение из памяти, но Android будет делать это всякий раз, когда ему нужны ресурсы, поэтому не имеет значения, что вы не будете делать это явно.
Я бы только добавил, что для достижения полного эффекта, который обычно имеет выход из приложения, вы бы хотели сбросить состояние приложения до того состояния, в котором оно обычно находится во время первого запуска после загрузки устройства. непосредственно перед вызовом finish () для всех ваших действий. Таким образом, если пользователь снова выберет ваше приложение, оно будет казаться запущенным «свежим», без какого-либо состояния, оставшегося от точки до симулированного «выхода».
Если есть некоторые специальные действия, которые должны выполняться только при «выходе», такие как сохранение работы пользователя или чего-либо еще, вы также можете выполнить их до повторной инициализации вышеописанной процедуры.
Этот подход позволяет вам достичь своей цели с помощью команды «выход», не нарушая философию Android, согласно которой управление ресурсами ОС, включая закрытие приложений, остается в руках операционной системы.
Лично я бы не стал использовать этот подход, поскольку пользователи Android ожидают, что приложение сохранит свою непрерывность при повторном посещении, и поэтому они не привыкли к модальности «выхода» из приложения. Вместо этого я бы поддерживал «чистую» функцию, которую пользователь может вызывать для сброса приложения до некоторого начального состояния по умолчанию, без необходимости «оставлять» его в процессе.
Единственное исключение будет, когда пользователь нажимает кнопку "Назад" достаточное количество раз, чтобы приложение закрылось. В этой ситуации пользователь не ожидает, что состояние будет сохранено (и если в приложении есть несохраненное состояние, то вы, как разработчик, должны иметь код, обрабатывающий кнопку «назад», которая обнаруживает эти несохраненные данные, и предлагает пользователю сохранить его в SharedPreferences или в файл, или на другой энергонезависимый носитель).
Относительно system.exit (0):
Если вы решите использовать system.exit (0), чтобы закрыть приложение с грубой окончательностью (например, в результате последнего нажатия кнопки «Назад»), то я бы предупредил вас, что, хотя для меня это «работает» и в некоторых случаях это был единственный способ, которым я смог закрыть приложение без каких-либо следов от него, есть один незначительный сбой, который возникает в Jelly Bean при использовании этого подхода.
В частности, если вы используете список «Недавние приложения», чтобы открыть свое приложение, а затем нажмите кнопку «Назад», чтобы закрыть приложение (с этим закрытием, реализованным с помощью system.exit (0)), список «Недавние приложения» снова станет видимым, как это никогда не будет закрыто. Если затем вы нажмете на запись вашего приложения в этом списке, чтобы запустить ее второй раз из того же, уже открытого списка недавних приложений, ответа не будет.
Я подозреваю, что причина этого в том, что в списке «Последние приложения» содержится ссылка на ваше приложение, которое перестало работать из-за того, что вы закрыли приложение с помощью system.exit (0). Более цивилизованное закрытие вашего приложения с использованием finish () могло бы информировать ОС таким образом, чтобы оно могло обновить свой список недавних приложений, но system.exit (0), по-видимому, этого не делает.
Само по себе это не является большой проблемой, так как очень немногие люди откроют приложение из Недавних приложений, затем закроют его, а затем сразу же откроют снова из того же открытого списка Недавних приложений. И если они нажмут кнопку «Домой», а затем заново откроют список последних приложений, запись вашего приложения будет там, и она будет полностью функциональной. Но Я думаю, что это показывает, что использование system.exit (0) может помешать правильной связи между вашим приложением и ОС, и это говорит о том, что могут быть и другие, более серьезные, возможно, тонкие, последствия использования этого подхода.