Как закрыть приложение 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());

Я думаю, что это лучше. Как насчет этого?

Даже если все выглядит хорошо, процесс убийства вызовет у вас головную боль в будущем. Вы можете убедиться в этом, используя следующий вариант использования:

  1. вызвать несколько действий, чтобы заполнить стек действий
  2. вызовите android.os.Process.killProcess(pid);
  3. открой заявку

НАБЛЮДЕНО: Ваше приложение непоследовательно открывается не из основной деятельности. Это связано с тем, что Android считает, что процесс уничтожается как сбой.

Вы можете найти более подробную информацию здесь: Не одобряется ли выход из приложения?

РЕШЕНИЕ 2023

Закрытие приложения с удалением процесса дает результат плавного закрытия и удаления всех процессов приложения через 100 миллисекунд:


      override fun exit() {
    coroutine.launch(Dispatchers.Main) {
        finishAndRemoveTask()
        delay(100)
        exitProcess(0)
    }
}
Другие вопросы по тегам