2012-07-26 14 views
19

He leído la guía para desarrolladores de Android y algunos artículos en Internet, todavía estoy confundiendo sobre el singleTasklaunchmode. Veamos un ejemplo:Acerca de Android launchmode "singleTask"

El usuario inicia la aplicación 1, Android inicia una nueva tarea. Suponga que la aplicación crea actividades en el siguiente orden:

ActivityA -> ActivityB -> ActivityC 

Así es como se ve la tarea1.

A continuación, el usuario haga clic en el boton casa y deciden poner en marcha App2, por lo Task1 va en segundo plano y Android iniciar una nueva tarea: Task2, el usuario hace algo:

ActivityD -> ActivityE 

Ahora digamos que ActivityE intento para iniciar ActivityB, y ActivityB tiene el modo de lanzamiento singleTask.

Lo que entiendo es que task1 vuelve a frontend y task2 va a segundo plano. Y Task1 ve ahora así:

ActivityA -> ActivityB 

Lo que significa:

  1. El ActivityC será retirado de Task1 y ActivityB convierte a la actividad superior.

  2. Si el usuario Ahora haga clic en el botón "Volver", que llegará a ActivityA de Task1 en lugar de volver a ActivityE de Task2

Estoy en lo cierto?

Gracias

Respuesta

6

El ActivityC se eliminarán de Task1 y ActivityB se convierte arriba Actividad.

Sí tienes razón ...

ActivityC será retirado de esto es el método OnDestroy del ActivityC se llamará. Por lo tanto, cuando el usuario inicia de nuevo la Tarea 1, se muestra el ActivityB en lugar de ActivityC.

Han creado 2 tareas (proyectos) y han subido el mismo @SendSpace. Pruébalo...

Si nos fijamos en los androides documentation Dice

"A 'singleTask' actividad permite otras actividades sean parte de su tarea. Es siempre en la raíz de su tarea, pero otras actividades (necesariamente 'estándar' y las actividades "singleTop") pueden lanzarse en esa tarea ".

Lo que significa que cuando hace 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 se pone en Pausa, y cuando la inicias nuevamente desde el La lista de "Aplicaciones recientes" la 2da actividad está destruida.

En un senario donde las actividades anteriores a las actividades de instancia única (ActivityB) no se eliminan de la pila posterior, y otra aplicación solicita esta actividad (ActivityB), es posible que no se muestren y 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í las advertencia

Los otros modos - singleTask y SingleInstance - no son apropiados para la mayoría de las aplicaciones, ya que dan lugar a un modelo de interacción que pueda ser desconocido para los usuarios y es muy diferente de la mayoría de los demás aplicaciones.

Espero que esto resuelva sus dudas.

+0

gracias, pero la respuesta en esta publicación me hace confundir: http://stackoverflow.com/questions/3219726/android-singletask- or-singleinstance-launch-mode nunca hay más de una instancia de una actividad "singleTask" o "singleInstance", por lo que se espera que esa instancia maneje todas las nuevas intenciones ... Sin embargo, una actividad "singleTask" puede o no tener otras actividades encima en la pila. Si lo hace, no está en posición de manejar la intención, y la intención se descarta. (Aunque se quitó la intención, su llegada habría provocado que la tarea pasara a primer plano, donde permanecería). – cn1h

+1

"Lo que significa que al hacer clic en el botón de inicio todas las actividades sobre la actividad de tarea única (que en su caso es ActivityB) se eliminan de la pila ". Acabo de encontrar esto en un proyecto, este es el caso. Gracias. –

+0

El enlace "Sendspace" está roto –

18

Te parece correcto.

¿Por qué no lo pruebas?

Se da también una aplicación que puede ayudar a explicar el modo de puesta en marcha:

https://play.google.com/store/apps/details?id=com.novoda.demos.activitylaunchmode

enter image description here

Las fuentes están en https://github.com/gnorsilva/Activities-LaunchMode-demo

+0

gracias, pero lo que es confuso im este documento: http://developer.android.com/guide/topics/manifest/activity-element.html#lmode Dice: Por el contrario, "singleTask" y las actividades "singleInstance" solo pueden comenzar una tarea. Siempre están en la raíz de la pila de actividades. – cn1h

+1

hay un error en la demostración. Cuando comienza una actividad nueva cuyo modo-languch es 'singleTask', la actividad siempre se creará en una nueva tarea. Pero en realidad, solo se creará en una nueva tarea si establece ** taskAffinity ** para la actividad. – smileVann

+1

https://github.com/gnorsilva/Activities-LaunchMode-demo/issues/2 –