2010-07-10 9 views
81

Tengo una aplicación que tiene una lista como actividad principal y luego puede hacer clic en los elementos que abren una vista detallada de ese elemento. También tengo una actividad de búsqueda que es similar a la actividad principal y funciona según lo previsto.Android singleTask o modo de inicio SingleInstance?

Sin embargo, quiero que esta actividad de búsqueda solo tenga una vez en la pila para que los usuarios puedan buscar varias veces y hacer clic atrás devuelvan a la vista de uso previo que estaban antes de comenzar la búsqueda (en lugar de volver al resultados de búsqueda de búsqueda)

tanto el modo de inicio singleTask como el de inicio de sesión de singel parecen hacer lo que quiero, así que no estoy seguro de cuál debería usar para este propósito y por qué?

Respuesta

139

Desde la página Application Fundamentals de la guía dev Android:

Por defecto, todas las actividades en una aplicación tienen una afinidad para cada otro - es decir, no hay una preferencia para que todos ellos pertenecen a la misma tarea .

Una actividad "singleInstance" representa solo como la única actividad en su tarea . Si se inicia otra actividad, que la actividad se pondrá en marcha en una tarea diferente independientemente de su modo de lanzamiento - como si FLAG_ACTIVITY_NEW_TASK estaba en el intención. En todos los demás aspectos, el modo "singleInstance" es idéntico al "singleTask".

Como se ha señalado anteriormente, nunca hay más de una instancia de una o actividad "singleTask" "SingleInstance", por lo que se espera que ejemplo para manejar todos los nuevos intentos . Una actividad "singleInstance" siempre está en la parte superior de la pila (ya que es la única actividad en la tarea ), por lo que siempre está en posición de manejar el intento . Sin embargo, una actividad "singleTask" puede o no tener tener otras actividades encima en la pila . Si lo hace, no está en la posición para manejar la intención, y el intento se descarta. (A pesar de que la intención se cae, su llegada sería haber causado la tarea para llegar a la primer plano, donde permanecería.)

4 Activities in a Task

Dado que nunca hay más de una instancia de la Actividad con cualquiera de los modos de lanzamiento, el botón Atrás lo llevará siempre a la instancia existente de la Actividad en su caso.

Una diferencia importante es que "singleTask" no requiere la creación de una nueva tarea para las nuevas actividades que se inician cuando se selecciona algo. Tampoco tendrá que eliminar esa nueva tarea en el botón Atrás cada vez.

Dado que tu pila de actividades pertenece a una "tarea" de usuario, y no parece que tengas una intrincada estructura de intención donde singleInstance puede ser beneficioso para manejarlas siempre, te sugiero usar el modo de inicio singleTask.

Aquí es una buena entrada en el blog para obtener más información, así como acreditado para la imagen: Android Activities and Tasks series – An introduction to Android’s UI component model

+3

Gracias! parece una buena lectura ... el problema es que realmente quiero una instancia múltiple de una actividad y solo cuando la actividad de primer plano es una actividad de búsqueda y se realiza otra búsqueda si usa esa actividad existente (como funciona el mercado) Y para eso el singeTop es exactamente lo que estoy buscando, pero gracias por la ayuda de todos modos =) gracias – Kman

+1

Hola, gracias. Esta publicación bien escrita me ayudó en un apuro. – icecreamman

+0

Gracias por los detalles, especialmente este * (aunque el intento se eliminó, su llegada habría provocado que la tarea pasara a primer plano, donde permanecería) *, lo que al instante borra mi confusión. Solo estaba pensando en qué pasaría si una actividad simple de prueba no está en la parte superior de la pila mientras todavía quiero navegar hacia ella sin especificar 'FLAG_ACTIVITY_CLEAR_TOP'. – neevek

4

singleTask y singleInstance actividades sólo puede comenzar una tarea. Siempre están en la raíz de la pila de actividades. Además, el dispositivo solo puede contener una instancia de la actividad a la vez, solo una de esas tareas.
para obtener más android:launchMode.

+0

la última oración es verdadera para singleInstance, no singleTask –

+0

@SerdarS. aprecia tu comentario Agregando más acerca de 'singleTask' - El sistema crea una nueva tarea y crea una instancia de la actividad en la raíz de la nueva tarea. Sin embargo, si una instancia de la actividad ya existe en una tarea separada, el sistema enruta el intento a la instancia existente a través de una llamada a su método 'onNewIntent()', en lugar de crear una nueva instancia. Solo puede existir una instancia de la actividad a la vez. para obtener más [developer.android.com] (https://developer.android.com/guide/components/activities/tasks-and-back-stack.html) –

+0

Entendido, entonces estaba equivocado. Lamento molestarte. –

27

En un simple manera-

singleTask:

el sistema crea una nueva tarea y crea instancias de la actividad en la raíz de la nueva tarea. Sin embargo, si una instancia de la actividad ya existe en una tarea separada, el sistema enruta el intento a la instancia existente a través de una llamada a su método onNewIntent(), en lugar de crear una nueva instancia. Solo one instance de la actividad puede existir a la vez.

Nota: Aunque la actividad comienza en una tarea nueva, el botón Atrás todavía devuelve al usuario a la actividad anterior.

singleInstance-

Igual que "singleTask", excepto que el sistema no se inicia ninguna otra actividad en la tarea que sostiene la instancia. La actividad es siempre el único y único miembro de su tarea; cualquier actividad iniciada por ésta se abre en una tarea separada.

Cuestiones relacionadas