Как закрыть приложение Android полностью
Я создал приложение для Android с возможностью выхода из системы в onCreateOptionsMenu
, Выход из системы работает отлично, но когда я снова нажимаю кнопку "Назад", он возвращает меня к предыдущему действию, а когда он получает нулевое значение, он перенаправляет на экран входа. Теперь мой экран входа появляется снова и снова. Я хочу полностью закрыть приложение, когда нажимаю кнопку "назад", но не знаю как.
Вот мой код для обработки нажатия кнопки "Назад" на экране входа в систему:
@Override
public void onBackPressed() {
new AlertDialog.Builder(this)
.setTitle("BidNEMO")
.setMessage("Are you sure you want to exit?")
.setNegativeButton(android.R.string.no, null)
.setPositiveButton(android.R.string.yes, new OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
Main.super.onBackPressed();
finish();
}
}).create().show();
}
помогите пожалуйста
8 ответов
К Quit Application
при нажатии кнопки используйте этот код:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
Попытайся..
Чтобы убить полное приложение и удалить его из Running
список приложений убить приложение через его pid
(это неприятно)... используйте эти строки перед кодом выше.
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
Если вы хотите закрыть приложение полностью, вы должны использовать finishAffinity();
вместо finish()
, Он очистит весь стек действий, ранее открытых приложением.
Для API 21 и выше
finishAndRemoveTask()
Вы можете позвонить, чтобы закрыть приложение полностью. Все мероприятия будут finish()
и приложение будет удалено из списка задач.
Для пользователей Xamarin:
int pid = Android.OS.Process.MyPid();
Android.OS.Process.KillProcess(pid);
положить его в свой OnDestroy()
функция.
Редактировать:
После тщательного изучения я обнаружил, что даже приведенный выше код не полностью "убивает" приложение (удаляя его из диспетчера задач - "последние приложения"). В конце концов, после многих попыток кода мне удалось кое-что выяснить, переопределив функции "Finish" следующим кодом:
public override void Finish()
{
if (Android.OS.Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
base.FinishAndRemoveTask();
}
else
{
base.Finish();
}
}
это единственное решение этого вопроса!
Для завершения занятия я использую этот код:
public void appExit () {
this.finish();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} //close method
или убить процесс с помощью этого кода:
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
android.os.Process.killProcess(android.os.Process.myUid());
Я думаю, что это лучше. Как насчет этого?
Даже если все выглядит хорошо, процесс убийства вызовет у вас головную боль в будущем. Вы можете убедиться в этом, используя следующий вариант использования:
- вызвать несколько действий, чтобы заполнить стек действий
- вызовите android.os.Process.killProcess(pid);
- открой заявку
НАБЛЮДЕНО: Ваше приложение непоследовательно открывается не из основной деятельности. Это связано с тем, что Android считает, что процесс уничтожается как сбой.
Вы можете найти более подробную информацию здесь: Не одобряется ли выход из приложения?
РЕШЕНИЕ 2023
Закрытие приложения с удалением процесса дает результат плавного закрытия и удаления всех процессов приложения через 100 миллисекунд:
override fun exit() {
coroutine.launch(Dispatchers.Main) {
finishAndRemoveTask()
delay(100)
exitProcess(0)
}
}