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

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

@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(); } 

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

РЕДАКТИРОВАТЬ :

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

 @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(); } 

Solutions Collecting From Web of "Android: выход из приложения при нажатии кнопки возврата"

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

 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 находится сверху в стеке, без каких-либо других действий вашего приложения в задней части.

Теперь в действии 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 () работает так же, как и кнопка «Главная». Он оставляет стек Back так, как есть.

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

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

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

 startActivity(I); 

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

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

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

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

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

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

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

 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); } 

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

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

Используйте этот код очень простое решение

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