Андроид выход из приложения при нажатии кнопки Назад
в моем приложении я хочу, чтобы выйти из приложения при нажатии кнопки назад, это мой код:
@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);
}
чтобы выйти из приложения при нажатии кнопки "назад", вы должны сначала очистить все основные действия, а затем запустить 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
}