Estoy teniendo varias actividades en mi aplicación. y el flujo es muy complicado. Cuando hago clic en la aplicación Cerrar sesión, navega a la pantalla de inicio de sesión y desde allí el usuario puede salir presionando el botón cancelar (llamando system.exit(0)
)
cuando salgo o retrocedo, 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 finish()
no es práctico ya que hay tantas actividades y algunas actividades no deberían cerrarse cuando están activos, como la actividad de invocación de cámara nativa.
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);
android
android-activity
stack
Jay Mayu
fuente
fuente
Respuestas:
La mayoría de ustedes está equivocado. Si desea cerrar la pila de actividades existente independientemente de lo que haya allí y crear una nueva raíz, el conjunto correcto de indicadores es el siguiente:
Desde el documento :
fuente
IntentCompat.makeRestartActivityTask
de la biblioteca de soporte.Cuando llamas
startActivity
a la última actividad, siempre puedes usarcomo una bandera en ese intento.
Lea más sobre la bandera aquí .
fuente
Aquí hay un método auxiliar simple para comenzar una nueva actividad como la nueva actividad principal que funciona desde el nivel 4 de API hasta la versión 17 actual:
llámalo así desde tu actividad actual:
fuente
Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB
otra cosaintent.addFlags(0x8000);
que nunca se agregaráBorrar Actividad Backstate con el siguiente código:
Hecho
fuente
En mi caso, LoginActivity también se cerró. Como resultado,
no ayudó.
Sin embargo, la configuración
me ayudó.
fuente
fuente
this.finish()
ysetFlags()
también para borrar la actividad actual?Noté que solicitó una solución en la que no se basa
finish()
, pero me pregunto si esto puede ayudar de todos modos.Rastreé si se levanta un indicador de salida con una variable de clase estática, que sobrevive a toda la vida útil de la aplicación. En cada actividad relevante
onResume()
, useLa clase ExitHelper
Digamos que en mainActivity, un usuario presiona un botón para salir; puede configurarlo
ExitHelper.isExitFlagRaised = true;
y luegofinish()
. A partir de entonces, también se terminarán otras actividades relevantes que se reanuden automáticamente.fuente
Esta decisión funciona bien:
Pero la nueva actividad se inicia por mucho tiempo y ves una pantalla en blanco en algún momento. Si esto es crítico, utilice esta solución alternativa:
Cómo usarlo:
Desventaja: todas las actividades que deben cerrarse en la pila deben extender BaseActivity
fuente
Para los desarrolladores de Xamarin, puede usar:
fuente
Usando Kotlin:
Puede establecer la bandera directamente utilizando el método setter. En Kotlin se
or
encuentra el reemplazo para Java o bit a bit|
.Si planea usar esto regularmente, cree una función de extensión de intención
Luego puede llamar directamente a esta función antes de comenzar la intención
fuente