Андроид выход из приложения при нажатии кнопки Назад

в моем приложении я хочу, чтобы выйти из приложения при нажатии кнопки назад, это мой код:

@Override
    public void onBackPressed() {
        new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit")
                .setMessage("Are you sure you want to exit?")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                }).setNegativeButton("No", null).show();
    }

это работает правильно, но когда я выхожу из приложения, он не выходит полностью и показывает пустую страницу с логотипом моего приложения, и когда я снова нажимаю кнопку "назад", как я могу это исправить???

EDIT:

Я использую этот код вместо выше, но мое приложение полностью выходит, но я хочу, чтобы он работал в фоновом режиме и не выходит полностью , как я могу это сделать это?

@Override
    public void onBackPressed() {
        new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit")
                .setMessage("Are you sure?")
                .setPositiveButton("yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        Intent intent = new Intent(Intent.ACTION_MAIN);
                        intent.addCategory(Intent.CATEGORY_HOME);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                        finish();
                    }
                }).setNegativeButton("no", null).show();
    } 

11 ответов


при нажатии клавиши back и затем завершения текущей деятельности(скажем), вы видите пустой деятельности с приложением логотип(например, B), это просто означает, что действие Б, которое показано после окончания еще в backstack, а также деятельность началась с активности B, т. е. в деятельности, вы должны начать деятельность с флагами как

Intent launchNextActivity;
launchNextActivity = new Intent(B.class, A.class);
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);                  
launchNextActivity.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(launchNextActivity);

Теперь ваша активность A сверху в стеке без каких-либо других действий вашего приложения на backstack.

Теперь в деятельности A если вы хотите реализовать onBackPressed, чтобы закрыть приложение, вы можете сделать что-то вроде этого,

private Boolean exit = false;
@Override
    public void onBackPressed() {
        if (exit) {
            finish(); // finish activity
        } else {
            Toast.makeText(this, "Press Back again to Exit.",
                    Toast.LENGTH_SHORT).show();
            exit = true;
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    exit = false;
                }
            }, 3 * 1000);

        }

    }

обработчик здесь обрабатывает случайные обратные нажатия, он просто показывает Toast, а если еще нажать в течение 3 секунд, он закрывает приложение.


попробуйте это:

Intent intent = new Intent(Intent.ACTION_MAIN);
          intent.addCategory(Intent.CATEGORY_HOME);
          intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//***Change Here***
          startActivity(intent);
          finish();
          System.exit(0);

У меня была та же проблема, у меня есть одна LoginActivity и одна MainActivity. Если я нажму кнопку "Назад" в MainActivity, приложение должно закрыться. Так я и сделал с onbackpressed методом. это moveTaskToBack () работает так же, как кнопка Home. Он оставляет заднюю стопку такой, какая она есть.

public void onBackPressed() {
  //  super.onBackPressed();
    moveTaskToBack(true);

}

это означает вашу предыдущую деятельность в стеке, когда вы начинаете эту деятельность. Добавить finish(); после строки, в которой вы называете это действие.

во всей вашей предыдущей деятельности. когда вы начинаете новую деятельность, как-

startActivity(I);

добавить finish(); после этого.


в моем понимании Google хочет, чтобы Android обрабатывал управление памятью и выключал приложения. Если вы должны выйти из приложения из кода, может быть полезно попросить Android запустить сборщик мусора.

@Override
public void onBackPressed(){
    System.gc();
    System.exit(0);
}

вы также можете добавить finish () в код, но это, вероятно, избыточно, если вы также делаете систему.выход(0)


Finish не закрывает приложение, он просто закрывает активность. Если это действие запуска, оно закроет ваше приложение; если нет, оно вернется к предыдущему действию.

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


кажется, никто не рекомендовал noHistory= "true"в manifest.xml для предотвращения определенных действий после нажатия кнопки Назад, которая по умолчанию вызывает метод finish ()


это работает для меня.Я нашел его сам, объединив другие ответы

private Boolean exit = false;
@override
public void onBackPressed(){ 
    if (exit) {
        finish(); // finish activity
    } 
    else {
        Toast.makeText(this, "Press Back again to Exit.",
            Toast.LENGTH_SHORT).show();
         exit = true;
         new Handler().postDelayed(new Runnable() {

         @Override
         public void run() {
             // TODO Auto-generated method stub
             Intent a = new Intent(Intent.ACTION_MAIN);
             a.addCategory(Intent.CATEGORY_HOME);
             a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             startActivity(a);
        }
    }, 1000);
}

вместо finish() вызов super.onBackPressed()


чтобы выйти из приложения при нажатии кнопки "назад", вы должны сначала очистить все основные действия, а затем запустить ACTION_MAIN телефона android

Итак, вы должны написать весь этот код, который упоминается ниже:

Примечание: В вашем случае MainActivity заменяется YourActivity

@Override
public void onBackPressed() {

        new AlertDialog.Builder(this)
                .setTitle("Really Exit?")
                .setMessage("Are you sure you want to exit?")
                .setNegativeButton(android.R.string.no, null)
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        MainActivity.super.onBackPressed();
                        quit();
                    }
                }).create().show();
    }


public void quit() {
        Intent start = new Intent(Intent.ACTION_MAIN);
        start.addCategory(Intent.CATEGORY_HOME);
        start.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        start.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(start);
    }

использовать код очень простое решение

 @Override
    public void onBackPressed() {
      super.onBackPressed(); // this line close the  app on backpress
 }