solucion - Android cierra la aplicación en el botón de atrás
mantener aplicaciones en segundo plano android (10)
1) Crea un archivo llamado Constants.java en el proyecto
2) Agregue este código a ese archivo
public static void killAll() {
for (Activity act : Constants.activity_stack) {
act.finish();
}
Constants.activity_stack.clear();
}
3) Ahora, cuando esté en la actividad principal en onCreate (), agregue el siguiente fragmento de código
// add to stack
Constants.activity_stack.add(this);
4) Del mismo modo agregar actividad de usuario a la pila
5) En Detalles de entrega en onBackPressed () use el siguiente fragmento de código
Constants.killAll();//will kill all the activities and bring you out of the application.
La aplicación se parece a esto: MainActivity -> UserActivity -> DetailsActivity. (orden aproximado de las actividades).
Me gustaría cerrar la aplicación cuando se hace clic en el botón Atrás en DetailsActivity (tercera actividad en la fila).
¿Quería saber si es una buena práctica hacer eso y cuál sería la mejor manera de hacerlo?
Aquí hay una clase completa que muestra cómo se llama a otra actividad cuando se presiona un botón en la primera actividad.
public class FirstActivity extends Activity implements View.OnClickListener {
Button goToSecondActivityButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_activity);
((TextView) findViewById(R.id.textRecommendationMessage)).setText("This is the first activity");
goToSecondActivityButton= (Button) findViewById(R.id.button_go_to_second_activity);
goToSecondActivityButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
goToSecondActivity();
}
private void goToSecondActivity() {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
finish();
}
}
Cuando inicie UserActivity desde MainActivity, ponga finish () después de startActivity (). haga lo mismo en UserActivity cuando inicie DetailsActivity
Dentro de tu actividad actual:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK ) {
Intent intent = new Intent(CurrentActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
}
return super.onKeyDown(keyCode, event);
}
Dentro de MainActivity OnCreate:
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
return;
}
Esto funciona para mí:
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);
}
Intente esto, no agregue noHistory
en su archivo principal cada actividad.
android:noHistory="true"
Puede lograrlo anulando el evento del botón Atrás para no agregar historial para una actividad específica en una condición específica.
@Override
public void onBackPressed()
{
if ( ! getIntent().getExtras().getBoolean(FROM_SETTINGS_KEY))
moveTaskToBack(true); // exist app
else
finish();
}
en mi ejemplo, comprueba si hay una bandera desde donde lancé mi actividad, si la inicié desde la configuración, actúe normalmente, de lo contrario, haga clic en la parte superior y salga de la aplicación en la parte posterior presionada
Si llama a UserActivity desde MainActivity, la llamada finaliza () después de startActivity (). A continuación se muestra el código:
Intent userActivity = new Intent(MainActivity.this, UserActivity.class);
userActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
MainActivity.this.startActivity(userActivity );
finish();
Si te entiendo correctamente, quieres cerrar la actividad incluso cuando la pila no está vacía, lo que significa que hay más de 1 actividad en la pila.
Bueno, si solo hay uno ... solo:
finish();
De lo contrario el truco es:
Intent intent = new Intent(Main.this, Main.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
Y en la misma actividad en onCreate
:
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
Así que borras la pila y luego matas el único que queda ... puedes hacer esto en cualquier actividad y por supuesto usarlo en onBackPressed
:)
prueba esto.
quitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View paramView)
{
finish();
moveTaskToBack(true);
}
});