2010-03-17 25 views
7

En mi aplicación puedes navegar por varias actividades hasta que la pila de actividades sea bastante profunda.Cerrar varias actividades de Android simultáneamente

Quisiéramos un botón en cada actividad que lo lleve directamente al menú principal, es decir, mostrar todas las actividades de la pila excepto la primera.

He puesto el botón en una Vista que puedo poner fácilmente en cada Actividad de la aplicación, pero no puedo encontrar la manera de cerrar varias Actividades de una sola vez.

(Si es posible, sería bueno si la vista podía calcular cuántos Actividades para cerrar por sí mismo -. Es decir, detectar la profundidad de la pila de su propia actividad es)

Respuesta

16

Tenga una mirada en la bandera intención FLAG_ACTIVITY_CLEAR_TOP que dice que lleva la actividad objetivo a la parte superior de la pila, eliminando todo lo demás que podría haber estado por encima de ella. Así que use ese botón que puede agregar a todas sus actividades para lanzar un intento que se dirija a su menú principal, con esa bandera establecida.

De la documentación:

Si se establece, y siendo la actividad lanzado ya se está ejecutando en la tarea actual , entonces en vez de el lanzamiento de una nueva instancia de esa actividad, todas las otras actividades en la parte superior se cerrará y esta intención se entregará a la actividad anterior (ahora en la parte superior) como una nueva intención.

Por ejemplo, considere una tarea que consiste en las actividades: A, B, C, D. Si D llama startActivity() con un Intención que se resuelve en el componente de la actividad de B, luego C y D se ser terminado y B recibe el dado intención, resultando en la pila ahora ser: a, B.

la instancia actualmente en ejecución de actividad B en el ejemplo anterior se ya sea recibir el nuevo intento eres de partida aquí en su onNewIntent() método, o se termine y se reinicie con la nueva intención. Si ha declarado que su modo de lanzamiento es "múltiple" (valor predeterminado) y tiene no establecido FLAG_ACTIVITY_SINGLE_TOP en el mismo intento, entonces será terminado y recreado; para todos los demás modos de inicio o si FLAG_ACTIVITY_SINGLE_TOP está configurado entonces este intento se entregará a la instancia actual de onNewIntent().

Este modo de lanzamiento también se puede utilizar para buen efecto en conjunto con FLAG_ACTIVITY_NEW_TASK: si se utiliza para iniciar la actividad de las raíces de una tarea, traerá ningún instancia actualmente en ejecución de esa tarea a la primer plano, y luego despejarlo a su estado raíz . Esto es especialmente útil, , por ejemplo, al iniciar una actividad desde el administrador de notificaciones .

+0

Lo haré, solo quiero estar seguro de que es totalmente correcto primero: me ha picado por eso antes ... – teedyay

+1

De hecho, esto tuvo el efecto deseado para mí: intent.SetFlags (ActivityFlags.ClearTop | ActivityFlags.SingleTop); – scolestock

-1

Se podría afirmar que la primera actividad android:launchMode="singleTask" (more) y luego simplemente comenzar con una intención.

EDIT: Mi sugerencia se basa en la suposición de que desea tener una única instancia de la actividad para volver. De lo contrario, es incorrecto.

+1

Sugerir el uso de singleTask aquí indica que no se entiende lo que hace singleTask ... está bien, es -es confuso y tiene muchas repercusiones en el comportamiento de la actividad. Entonces, a menos que entienda y quiera todo lo que le hace, por favor evítelo. El 99% de las aplicaciones solo necesitan utilizar modos de inicio normales o, a veces, únicos. – hackbod

Cuestiones relacionadas