start - launch mode android
Acerca de Android launchmode "singleTask" (2)
Leí la guía para desarrolladores de Android y algunos artículos en Internet, todavía estoy confundido sobre el modo de singleTask
launchmode
. Tomemos un ejemplo:
El usuario inicia la aplicación 1, Android inicia una nueva tarea. Suponga que la aplicación 1 crea actividades en el siguiente orden:
ActivityA -> ActivityB -> ActivityC
Así es como se ve la tarea1.
A continuación, el usuario hace clic en el botón de inicio y elige ejecutar App2, por lo que task1 se pone en segundo plano y android inicia una nueva tarea: task2, el usuario hace algo:
ActivityD -> ActivityE
ahora digamos ActivityE
intente iniciar ActivityB
, y ActivityB
tiene launchmode singleTask
.
Lo que entiendo es que task1 vuelve a frontend y task2 va a segundo plano. Y la tarea1 se ve así:
ActivityA -> ActivityB
Lo que significa:
El
ActivityC
se eliminará de la tarea1 y ActivityB se convertirá en la actividad superior.Si el usuario ahora hace clic en el botón "Atrás", llegará a
ActivityA
de task1 en lugar de volver aActivityE
de task2
¿Estoy en lo cierto?
Gracias
El ActivityC se eliminará de la tarea1 y ActivityB se convertirá en la actividad superior.
Sí, tiene usted razón...
ActivityC se eliminará, es decir, se invocará el método onDestroy del ActivityC. Por lo tanto, cuando el usuario inicia de nuevo la Tarea 1, se muestra el ActivityB en lugar de ActivityC.
Ha creado 2 Tareas (Proyectos) y ha subido el mismo @ SendSpace . Pruébalo...
Si miras la documentation androides dice
"Una actividad de" singleTask "permite que otras actividades sean parte de su tarea. Siempre está en la raíz de su tarea, pero otras actividades (necesariamente las actividades" estándar "y" singleTop ") pueden iniciarse en esa tarea".
Lo que significa que al hacer clic en el botón de inicio, todas las actividades que están por encima de la actividad de tarea única (que en su caso es ActivityB) se eliminan de la pila.
En la aplicación de ejemplo que te había dado antes si solo ejecutas el proyecto "AndroidTest" y haces clic en el botón de inicio en los registros, puedes ver que la 2da Actividad está en Pausa y cuando la inicias nuevamente desde la "Aplicación Reciente" lista la 2da Actividad es Destruida
En un senario en el que las Actividades anteriores a la Actividad de instancia única (ActivityB) no se eliminen de Back Stack, y otra aplicación solicite esta Actividad (ActivityB), es posible que no se muestren y que se elimine la intención. Pero esto tiene menos posibilidades de ocurrir porque el usuario tendrá que presionar el botón de Inicio y la Tarea / Aplicación actual en el BackStack antes de poder navegar a otra Tarea / Aplicación.
De ahí la advertencia
Los otros modos, singleTask y singleInstance, no son apropiados para la mayoría de las aplicaciones, ya que dan como resultado un modelo de interacción que probablemente no sea familiar para los usuarios y es muy diferente de la mayoría de las otras aplicaciones.
Espero que esto resuelva tus dudas.
Tu suenas bien
¿Por qué no lo pruebas?
También hay esta aplicación que puede ayudar a explicar el modo de lanzamiento:
https://play.google.com/store/apps/details?id=com.novoda.demos.activitylaunchmode
Las fuentes están en https://github.com/gnorsilva/Activities-LaunchMode-demo