studio - Android: salga de la aplicación cuando presione el botón Atrás
programacion android pdf 2018 (11)
Cuando presiona hacia atrás y luego termina su actividad actual (decir A), ve una actividad en blanco con el logotipo de su aplicación (digamos B), esto simplemente significa que la actividad B que se muestra después de terminar A todavía está en backstack, y también actividad A se inició a partir de la actividad B, por lo que en la actividad, debe comenzar la actividad A con banderas como
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);
Ahora su actividad A es la mejor en la pila sin otras actividades de su aplicación en la backstack.
Ahora en la actividad A en la que desea implementar onBackPressed para cerrar la aplicación, puede hacer algo como esto,
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);
}
}
Aquí el Handler maneja las contrapresiones accidentales, simplemente muestra un Toast
, y si hay otra presión en 3 segundos, cierra la aplicación.
En mi aplicación quiero salir de la aplicación cuando presiono el botón Atrás, este es mi código:
@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();
}
funciona correctamente pero cuando salgo de la aplicación no sale completamente y muestro la página vacía con el logotipo de mi aplicación y cuando de nuevo presiono el botón Atrás salgo de la aplicación, ¿cómo puedo solucionarlo?
EDITAR:
Uso este código en lugar de arriba, pero mi aplicación se cierra por completo, pero quiero que se ejecute en segundo plano y no se cierra por completo, ¿cómo puedo hacerlo?
@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();
}
El final no cierra la aplicación, simplemente cierra la actividad. Si esta es la actividad del iniciador, cerrará su aplicación; si no, volverá a la actividad anterior.
Lo que puede hacer es usar en ActivityResult para desencadenar tantos finish () como sea necesario para cerrar todas las actividades abiertas.
En lugar de finish()
llame a super.onBackPressed()
Para salir de la aplicación al presionar el botón Atrás, primero debes borrar todas las actividades principales y luego iniciar ACTION_MAIN del teléfono Android
Entonces, debe escribir todos estos códigos solo que se mencionan a continuación:
Nota: en su caso, YourActivity reemplaza la actividad principal
@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);
}
Prueba esto:
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);
Según tengo entendido, Google quiere que Android administre la memoria y cierre las aplicaciones. Si debe salir de la aplicación del código, podría ser beneficioso pedirle a Android que ejecute el recolector de basura.
@Override
public void onBackPressed(){
System.gc();
System.exit(0);
}
También puede agregar finish () al código, pero probablemente sea redundante, si también lo hace System.exit (0)
Significa tu actividad anterior en la pila cuando comienzas esta actividad. Agregar finish();
después de la línea en la que llamas a esta actividad.
En toda tu actividad previa. cuando comienzas una actividad nueva como-
startActivity(I);
Agregar finish();
después de este.
Tuve el mismo problema, tengo una LoginActivity y una MainActivity. Si hago clic en el botón Atrás en MainActivity, la aplicación debe cerrarse. ASÍ lo hice con el método OnBackPressed. este movimientoTaskToBack () funciona igual que el botón de inicio. Deja la pila posterior tal como está.
public void onBackPressed() {
// super.onBackPressed();
moveTaskToBack(true);
}
Usa este código de solución muy simple
@Override
public void onBackPressed() {
super.onBackPressed(); // this line close the app on backpress
}
nadie parece haber recomendado noHistory = "true" en manifest.xml para evitar que aparezca cierta actividad después de presionar el botón Atrás, que por defecto llama al método finish ()
Este trabajo para mí. Lo encontré yo mismo combinando otras respuestas
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);
}