Android: Borrar pila de actividad

Tengo varias actividades en mi aplicación. Y el flujo es muy complicado. Cuando hago clic en la aplicación Logout naviagates para acceder a la pantalla y desde allí el usuario puede salir cancelando buton (llamando a system.exit(0) )

Cuando salgo o vuelvo el botón, el sistema invoca una actividad de la pila 🙁 ¿cómo puedo borrar todas las actividades en la pila cuando llego a la pantalla de inicio de sesión? Llamar a finish() no es práctico ya que hay tantas actividades y algunas actividades no debe ser Cerrado cuando están activos, como la cámara nativa que invoca la actividad.

 validateuser logoutuser = new validateuser(); logoutuser.logOut(); Intent loginscreen = new Intent(homepage.this, Login2.class); (homepage.this).finish(); loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(loginscreen); 

La mayoría de ustedes están equivocados. Si desea cerrar una pila de actividades existente, independientemente de lo que hay allí y crear una nueva raíz, el conjunto correcto de banderas es el siguiente:

 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

Desde el doc :

public static final int FLAG_ACTIVITY_CLEAR_TASK
Añadido en API nivel 11

Si se establece en una Intención pasada a Context.startActivity() , este indicador hará que cualquier tarea existente que se asociaría con la actividad se borre antes de que se inicie la actividad. Es decir, la actividad se convierte en la nueva raíz de una tarea de otra manera vacía, y todas las actividades viejas están terminadas. Esto sólo se puede utilizar junto con FLAG_ACTIVITY_NEW_TASK .

Cuando llama a startActivity en la última actividad que siempre podría utilizar

Intent.FLAG_ACTIVITY_CLEAR_TOP

Como una bandera en esa intención.

Lea más sobre la bandera aquí .

Aquí está un método simple del ayudante para comenzar una nueva actividad como la nueva actividad superior que trabaja del nivel 4 de la API hasta la versión actual 17:

 static void startNewMainActivity(Activity currentActivity, Class<? extends Activity> newTopActivityClass) { Intent intent = new Intent(currentActivity, newTopActivityClass); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) intent.addFlags(0x8000); // equal to Intent.FLAG_ACTIVITY_CLEAR_TASK which is only available from API level 11 currentActivity.startActivity(intent); } 

Llámelo así de su actividad actual:

 startNewMainActivity(this, MainActivity.class); 

Borrar Actividad Retroceder por debajo del código:

 Intent intent = new Intent(Your_Current_Activity.this, Your_Destination_Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK |Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 

Hecho

En mi caso, LoginActivity también se cerró. Como resultado,

 Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK 

no ayudó.

Sin embargo,

 Intent.FLAG_ACTIVITY_NEW_TASK 

me ayudó.

 Intent intent = new Intent(LoginActivity.this, Home.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //It is use to finish current activity startActivity(intent); this.finish(); 

Observé que usted pidió una solución que no confíe en el finish() , pero me pregunto si esto puede ayudar sin embargo.

Seguí si una bandera de salida se levanta con una variable de clase estática, que sobrevive a toda la vida útil de la aplicación. En onResume() cada actividad relevante , utilice

 @Override public void onResume() { super.onResume(); if (ExitHelper.isExitFlagRaised) { this.finish(); } } 

La clase ExitHelper

 public class ExitHelper { public static boolean isExitFlagRaised = false; } 

Digamos que en mainActivity, un usuario presiona un botón para salir – puede establecer ExitHelper.isExitFlagRaised = true; Y luego finish() . A partir de entonces, también se finalizarán otras actividades relevantes que se reanuden automáticamente.

  • Error StackOverflow, excepción View.inflate
  • ¿Hay alguna forma de mostrar pilas de Acivity para Android?
  • Actividades
  • Crash debido a "corrupción de pila detectada: abortada"
  • Android: ¿Cómo puedo crear una vista de pila deslizable?
  • ¿Cómo administrar la pila de actividades?
  • ¿Simular la vista de pila en Android 2 (API 5)?
  • ¿Cómo manipulo la pila de actividades de Android?
  • Error: Theme.Translucent & FLAG_ACTIVITY_REORDER_TO_FRONT
  • Android: borra la pila trasera
  • Android finaliza Actividad e inicia otra
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.