studio solucion solas segundo que programacion plano móviles mantener las inesperado evitar desarrollo curso como cierren cierre cierran aplicaciones android

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