Entendiendo el modo de lanzamiento de la Actividad en Android

¡Compartir es cuidar!

El modo de lanzamiento de la actividad juega un papel importante para mantener la tarea y la pila posterior. Antes de explicar el modo de lanzamiento tenemos que entender primero lo que es la tarea y la pila de fondo?

Task

Una tarea es una «pila de Actividades» en su aplicación. Si una Actividad es enviada al fondo (pulsando la tecla HOME mientras se visualiza, por ejemplo) entonces toda la Tarea (y todas las Actividades dentro de ella) serán enviadas también al fondo. Si el usuario hace entonces clic en su aplicación, la tarea (y el orden de sus actividades) se adelantan. En otras palabras, una tarea es una colección de actividades con las que los usuarios interactúan cuando realizan un determinado trabajo. Las actividades están dispuestas en una pila -la pila posterior- en el orden en que se abre cada actividad.

Así que, básicamente, cuando un usuario lanza una aplicación desde el icono de inicio, navega a través de diferentes pantallas por lo que diferentes actividades colocadas en la parte superior de la otra. Esta colección de actividades se conoce como tareas.

Back Stack

Las actividades se organizan en el orden en que se abre cada actividad. Esta pila mantenida se llama Back Stack. Cuando se inicia una nueva actividad utilizando startActivity(), se «empuja» una nueva actividad en su tarea, y se pone la actividad anterior en la pila de atrás.

Una vez que se pulsa el botón de retroceso entonces «salta» la actividad más alta y la elimina de la pila de atrás y le lleva de nuevo a la actividad anterior.

Modo de lanzamiento

Un «modo de lanzamiento» es la forma en que una nueva instancia de una actividad se va a asociar con la tarea actual. Los modos de lanzamiento pueden definirse utilizando uno de los dos mecanismos:

  1. Declarando en el archivo AndroidManifest.xml
  2. Agregando la bandera con Intent.

Hay cuatro tipos si modo de lanzamiento de actividad. Estos son:

  1. estándar
  2. singleTop
  3. singleTask
  4. SingleInstance

Archivo de manifiesto: Al declarar una actividad en un archivo de manifiesto, puede especificar cómo la actividad debe asociarse con las tareas cuando se inicia.

Exp:

<activity android:launchMode = ../>

Bandera de intención: Android también proporciona banderas de actividad mediante las cuales se puede cambiar el comportamiento predeterminado de la asociación de la actividad con las tareas mientras se inicia a través del método startActivity(). Estos valores de las banderas se pueden pasar a través de los datos adicionales Intent.

FLAG_ACTIVITY_NEW_TASK -> similar to "launchMode = singleTask"FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_SINGLE_TOP -> similar to "launchMode = singleTop"FLAG_ACTIVITY_CLEAR_TOP

standard (por defecto) : Este es el modo común para la mayoría de las actividades.Múltiples instancias de la clase de actividad se pueden instanciar y múltiples instancias se pueden añadir a la misma tarea o diferentes tareas.

Ejemplo:
Supongamos que usted tiene actividades A, B, C y D y su actividad B tiene «modo de lanzamiento = estándar». Ahora vuelve a lanzar la actividad B –
Estado de la pila de actividades antes del lanzamiento B
A -> B -> C -> D
Estado de la pila de actividades después del lanzamiento B
A -> B -> C -> D -> B

singleTop : La diferencia con el estándar es que si ya existe una instancia de la actividad en la parte superior de la tarea actual y el sistema encamina la intención a esta actividad, no se creará una nueva instancia porque disparará un métodoonNewIntent() en lugar de crear un nuevo objeto.

Ejemplo:
Caso 1:
Supón que tienes las actividades A, B y C y tu actividad D tiene «modo de lanzamiento = singleTop». Ahora usted lanza la actividad D –
Estado de la pila de actividades antes del lanzamiento D
A -> B -> C
Estado de la pila de actividades después del lanzamiento de la actividad D
A -> B -> C -> D (Aquí D se lanza como siempre)
Caso 2:
Suponga que tiene las actividades A, B, C y D y su actividad D tiene «modo de lanzamiento = singleTop». Ahora usted lanza de nuevo la actividad D –
Estado de la pila de actividades antes del lanzamiento D
A -> B -> C -> D
Estado de la pila de actividades después del lanzamiento de la actividad D
A -> B -> C -> D (Aquí se llama a la instancia antigua y la ruta de los datos de la intención a través de onNewIntent() callback)

singleTask : Siempre se creará una nueva tarea y una nueva instancia será empujada a la tarea como la raíz. Sin embargo, si cualquier instancia de actividad existe en cualquier tarea, el sistema dirige la intención a esa instancia de actividad a través de la llamada al métodoonNewIntent(). En este modo, las instancias de actividad pueden ser empujadas a la misma tarea. Este modo es útil para las actividades que actúan como puntos de entrada.

Ejemplo:
Caso 1:
Supongamos que tienes las actividades A, B y C y tu actividad D tiene «modo de lanzamiento = singleTask». Ahora se lanza la actividad D –
Estado de la pila de actividades antes del lanzamiento D
A -> B -> C
Estado de la pila de actividades después del lanzamiento de la actividad D
A -> B -> C -> D (Aquí el lanzamiento de D es el habitual)
Caso 2:
Suponga que tiene las actividades A, B, C y D y su actividad B tiene «modo de lanzamiento = singleTask». Ahora vuelves a lanzar la actividad B-
Estado de la pila de actividades antes del lanzamiento D
A -> B -> C -> D
Estado de la pila de actividades después del lanzamiento de la actividad B
A -> B (Aquí se llama a la instancia antigua y los datos de la intención se enrutan a través de la devolución de llamada onNewIntent())
También observa que las actividades C y D se destruyen aquí.

singleInstance : Igual que,singleTask excepto que la instancia de ninguna actividad puede ser empujada en la misma tarea de la singleInstance. En consecuencia, la actividad con el modo de lanzamiento es siempre en una sola tarea de instancia de actividad. Este es un modo muy especializado y sólo debe utilizarse en aplicaciones que se implementan en su totalidad como una actividad.

Ejemplo:
Caso 1:
Supongamos que usted tiene A, B y C actividades y su actividad D tiene «modo de lanzamiento = singleInstance». Ahora lanza la actividad D –
Estado de la pila de actividades antes del lanzamiento D
A -> B -> C
Estado de la pila de actividades después del lanzamiento de la actividad D
Task1-A -> B -> C
Task2-D (aquí D estará en una tarea diferente)
Ahora si continúa esto y comienza E y D entonces la Pila se verá como-
Task1-A -> B -> C -> E
Task2-D
Caso 2:
Supongamos que tienes las actividades A, B, C en una tarea y la actividad D está en otra tarea con «modo de lanzamiento = singleInstance». Ahora vuelves a lanzar la actividad D-
Estado de la pila de actividades antes del lanzamiento D
Task1-A -> B -> C
Task2-D
Estado de la pila de actividades después del lanzamiento de la actividad B
Task1-A -> B -> C
Task2-D (Aquí se llama a la instancia antigua y los datos de la intención se dirigen a través de la devolución de llamada onNewIntent())

FLAG_ACTIVITY_NEW_TASK : Igual que el valorsingleTask en el archivo Manifest (ver arriba).

FLAG_ACTIVITY_SINGLE_TOP : Igual que el valorsingleTop en el archivo Manifest (ver arriba).

FLAG_ACTIVITY_CLEAR_TOP : Si la actividad que se está iniciando ya se está ejecutando en la tarea actual, entonces en lugar de lanzar una nueva instancia de esa actividad, todas las otras actividades por encima de ella se destruyen y esta intención se entrega a la instancia reanudada de la actividad (ahora por encima), sin embargo.onNewIntent() No hay ningún valor correspondiente en el archivo Manifest que produce este comportamiento. La referencia que utilicé para este artículo está aquí y aquí.

Por favor, suscríbase a su correo electrónico para obtener todos los boletines de este blog y si cree que este post le ayudará a entender mejor, entonces no se olvide de suscribirse, compartir y comentar a continuación. Ok, entonces nos vemos en mi próximo tutorial hasta entonces disfrutar de su vida y la codificación feliz 🙂

0 0 voto
Article Rating

Soy un desarrollador de Android muy entusiasta para construir aplicaciones Android sólidos. Tengo un gran interés en el desarrollo para Android y he publicado aplicaciones en la Google Play Store. Siempre estoy abierto a aprender nuevas tecnologías. Para cualquier ayuda, escríbenos en cualquier momento a [email protected]