Mi aplicación tiene las siguientes pantallas de flujo:
Home->screen 1->screen 2->screen 3->screen 4->screen 5
Ahora tengo un log out
botón común en cada pantalla
( Home/ screen 1 / screen 2 /screen 3/ screen 4 / screen 5
)
Quiero que cuando el usuario haga clic en el botón de cerrar sesión (desde cualquier pantalla), todas las pantallas estarán terminadas y Log in
se abrirá una nueva pantalla .
He intentado casi todo FLAG_ACTIVITY
para lograr esto. También reviso algunas respuestas en stackoverflow, pero no puedo resolver el problema. Mi aplicación está en Android 1.6, así que no puedo usarFLAG_ACTIVITY_CLEAR_TASK
¿Hay alguna forma de resolver el problema?
Respuestas:
Utilizar:
Esto borrará todas las actividades en la parte superior de la casa.
Suponiendo que está terminando la pantalla de inicio de sesión cuando el usuario inicia sesión y se crea la página de inicio y luego todas las pantallas de 1 a 5 encima de esa. El código que publiqué lo devolverá a la pantalla de inicio y finalizará todas las demás actividades. Puede agregar un extra en la intención y leerlo en la actividad de la pantalla de inicio y finalizarlo también (tal vez inicie nuevamente la pantalla de inicio de sesión o algo así).
No estoy seguro, pero también puede intentar iniciar sesión con esta bandera. No sé cómo se ordenarán las actividades en ese caso. Así que no sé si eliminará los que están debajo de la pantalla en la que está, incluido el que está actualmente, pero definitivamente es el camino a seguir.
Espero que esto ayude.
fuente
singleInstance
, considere usarFLAG_ACTIVITY_CLEAR_TOP|FLAG_ACTIVITY_SINGLE_TOP
como indicadores para la intención. Esto terminará las actividades de intervención y comenzará (o traerá de nuevo a primer plano) la actividad deseada.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
a mi actividad no me ayudó. No terminó las actividades que intervienen. Cuando presiono hacia atrás desde la pantalla de Inicio de sesión puedo ver las actividades anteriores. Aquí está mi códigoIntent intent=new Intent(BaseActivity.this, Login.class);intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);startActivity(intent);
.Puedes intentarlo
Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
. Borrará totalmente todas las actividades anteriores y comenzará una nueva actividad.fuente
Antes de lanzar su nueva Actividad, simplemente agregue el siguiente código:
O si quieres que funcione en versiones anteriores de Android:
fuente
Cuando el usuario desea salir de todas las actividades abiertas , debe presionar un botón que carga la primera Actividad que se ejecuta cuando se inicia su aplicación, borrar todas las demás actividades y luego finalizar la última actividad restante. Ejecute el siguiente código cuando el usuario presione el botón de salida. En mi caso,
LoginActivity
es la primera actividad en ejecutar mi programa.El código anterior borra todas las actividades excepto
LoginActivity
. Luego ponga el siguiente código dentro deLoginActivity
'sonCreate(...)
, para escuchar cuándoLoginActivity
se recrea y se pasa la señal' EXIT ':¿Por qué es tan difícil hacer un botón de salida en Android?
Android se esfuerza por disuadirlo de tener un botón de "salida" en su aplicación, porque quieren que al usuario nunca le importe si los programas que utilizan se ejecutan en segundo plano o no.
Los desarrolladores del sistema operativo Android quieren que su programa pueda sobrevivir a un apagado inesperado y apagar el teléfono, y cuando el usuario reinicia el programa, retoman el punto donde lo dejaron. Por lo tanto, el usuario puede recibir una llamada telefónica mientras usa su aplicación y abrir mapas que requieren que su aplicación se libere para obtener más recursos.
Cuando el usuario reanuda su aplicación, retoma justo donde lo dejó sin interrupción. Este botón de salida está usurpando el poder del administrador de actividades, lo que puede causar problemas con el ciclo de vida del programa Android administrado automáticamente.
fuente
Esto funcionará para todas las versiones de Android. Donde se
IntentCompat
agregó la clase en la biblioteca de soporte de Android.fuente
IntentCompat.FLAG_ACTIVITY_CLEAR_TASK
no se reconoce, use enIntent
lugar deIntentCompat
.Use lo siguiente para la actividad
eliminar el indicador CLEAR_TASK para el uso de fragmentos.
Espero que esto pueda usarse para algunas personas.
fuente
Supongo que llego tarde pero hay una respuesta simple y corta. Hay un método finishAffinity () en Activity que finalizará la actividad actual y todas las actividades principales, pero solo funciona en Android 4.1 o superior.
Para API 16+, use
finishAffinity();
Para menores de 16 años, use
ActivityCompat.finishAffinity(YourActivity.this);
¡Espero eso ayude!
fuente
Desde developer.android.com :
Finalice esta actividad, así como todas las actividades inmediatamente debajo de ella en la tarea actual que tengan la misma afinidad. Esto normalmente se usa cuando una aplicación se puede iniciar en otra tarea (como desde una ACTION_VIEW de un tipo de contenido que comprende) y el usuario ha utilizado la navegación hacia arriba para cambiar de la tarea actual a su propia tarea. En este caso, si el usuario se ha desplazado hacia abajo a cualquier otra actividad de la segunda aplicación, todas ellas deben eliminarse de la tarea original como parte del cambio de tarea.
Tenga en cuenta que este final no le permite entregar resultados a la actividad anterior, y se lanzará una excepción si está intentando hacerlo.
fuente
En una nota al margen, es bueno saber que
esta respuesta funciona ( https://stackoverflow.com/a/13468685/7034327 )
mientras que esto no funciona
.setFlags()
reemplaza cualquier indicador anterior y no agrega ningún indicador nuevo mientras lo.addFlags()
hace.Entonces esto también funcionará
fuente
Si su aplicación tiene un mínimo de SDK versión 16, entonces puede usar finishAffinity ()
Finalice esta actividad, así como todas las actividades inmediatamente debajo de ella en la tarea actual que tengan la misma afinidad.
Esto es trabajo para mí En la pantalla de Pago superior, elimine todas las actividades de back-stack,
http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29
fuente
Una solución que implementé para esto (creo que la encontré en Stack Overflow en alguna parte, pero no lo recuerdo, así que gracias a quien hizo eso en primer lugar):
Desde cualquiera de sus actividades, haga esto:
Luego, en su LoginActivity, sobrescriba onKeyDown:
fuente
Para el botón de cierre de sesión en la última pantalla de la aplicación, use este código en el botón de escucha de cierre de sesión para finalizar todas las actividades anteriores abiertas, y su problema está resuelto.
fuente
fuente
setFlags
reemplazará todos los anteriores, por lo que el últimosetFlags
solo es válido, los anteriores se reemplazan. Entonces no necesita llamari1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
Tengo el mismo problema que puedes usar
IntentCompat
, así:Este código funciona para mí.
API de Android 17
fuente
En mi caso, utilizo la
finishAffinity()
función en la última actividad como:Espero que te sea útil.
fuente
en lugar de usar
finish()
solo usarfinishAffinity();
fuente
Iniciar sesión> Inicio-> pantalla 1-> pantalla 2-> pantalla 3-> pantalla 4-> pantalla 5
en la pantalla 4 (o cualquier otra) ->
confuente
para API> = 15 a API 23 solución simple.
fuente
Si está utilizando
startActivityForResult()
en sus actividades anteriores, simplemente anuleOnActivityResult()
y llame alfinish();
método dentro de él en todas las actividades. Esto hará el trabajo ...fuente
startActivity
solo estoy usando .onActivityResult
en cada actividad. He implementado la sugerencia de DArkO y he logrado mi objetivo y gracias por la ayuda.Cuando el usuario haga clic en el botón Cerrar sesión, escriba el siguiente código:
Y también cuando, después de iniciar sesión, si llama a una nueva actividad, no use finish ();
fuente
Simplemente, cuando salga de la pantalla de inicio de sesión, no cuando termine la pantalla de inicio de sesión.
Y luego, en todas las actividades hacia adelante, use esto para cerrar sesión:
Funciona perfectamente
fuente
Si inicia sesión en el usuario
screen 1
y desde allí va a las otras pantallas, usefuente
onKeyDown
yonBackPressed
(oonKeyDown
, si desea admitir versiones de Android <2.0) en cada una de sus actividades (excepto la de inicio de sesión), ystartActivity(login)
allí como se muestra arriba.Encontré de esta manera, borrará todo el historial y saldrá
fuente
Supongo que llego tarde pero hay una respuesta simple y corta. Hay un método finishAffinity () en Activity que finalizará la actividad actual y todas las actividades principales, pero solo funciona en Android 4.1 o superior.
Para API 16+, use
finishAffinity ();
Para menores de 16 años, use
ActivityCompat.finishAffinity (YourActivity.this);
¡Espero eso ayude!
shareedit respondió mayo 27 '18 a las 8:03
Akshay Taru
fuente
Encontré que esta solución funciona en todos los dispositivos a pesar del nivel de API (incluso para <11)
fuente
La mejor manera de cerrar todas las actividades anteriores y borrar la memoria
fuente
fuente