Android singleTask o singleInstance modo de lanzamiento?


Tengo una aplicación que tiene una lista como su actividad principal y luego puede hacer clic en elementos que abre 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.

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

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

Author: RzR, 2010-07-10

3 answers

Desde la página Fundamentos de la aplicación de la guía de desarrollo de Android:

Por defecto, todas las actividades en un la aplicación tiene una afinidad por cada es decir, hay una preferencia para que todos pertenezcan al mismo tarea.

Una actividad" singleInstance " se encuentra solo como la única actividad en su tarea. Si inicia otra actividad, esa actividad se pondrá en marcha en un 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 El modo "singleInstance" es idéntico a "singleTask".

Como se señaló anteriormente, nunca hay más que una instancia de una "singleTask" o Actividad" singleInstance", de modo que se espera que la instancia maneje todo lo nuevo intención. Una actividad" singleInstance" siempre está en la parte superior de la pila (ya que es la única actividad en el tarea), por lo que siempre está en posición de maneja la intención. Sin embargo, un "singleTask" la actividad puede o no tener otras actividades por encima de ella en el pila. Si lo hace, no está en posición para manejar la intención, y el se abandona la intención. (A pesar de que el la intención se deja caer, su llegada sería han hecho que la tarea de llegar a la en primer plano, donde permanecería.)

4 Actividades en una Tarea

Dado que nunca hay más de una instancia de la Actividad con cualquiera de los modos de lanzamiento, el botón atrás siempre lo llevará 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 lanzan cuando se selecciona algo. Tampoco tendrá que eliminar esa nueva tarea en el botón atrás cada vez.

Dado que su pila de actividades pertenece a una "tarea" de usuario, y no parece que tenga una intrincada estructura de Intent donde singleInstance puede ser beneficioso manejarlas siempre, sugeriría usar el lanzamiento de singleTask modo.

Aquí hay una buena entrada de blog para más información, así como acreditada por la imagen: Serie de Actividades y Tareas de Android – Una introducción al modelo de componentes de interfaz de usuario de Android

 141
Author: Guzba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-10 18:42:57

De una manera simple -

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 la intent 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 lanza ninguna otra actividad en la tarea que contiene la instancia. La actividad es siempre el único y único miembro de su tarea; cualquier actividad iniciada por esta se abre en una tarea separada.

 30
Author: Tarun Varshney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-13 08:10:33

singleTask y singleInstance las actividades solo pueden 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 más android:launchMode.

 4
Author: Rupesh Yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-08 10:22:12