Android singleTask o singleInstance modo de lanzamiento?

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.

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

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

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

De forma predeterminada, todas las actividades de una aplicación tienen afinidad entre sí, es decir, hay una preferencia para que todas ellas pertenezcan a la misma tarea.

Una actividad de “instancia única” es la única actividad en su tarea. Si comienza otra actividad, esa actividad se iniciará en una tarea diferente, independientemente de su modo de lanzamiento, como si FLAG_ACTIVITY_NEW_TASK estuviera en el bash. En todos los demás aspectos, el modo “singleInstance” es idéntico a “singleTask”.

Como se señaló anteriormente, nunca hay más de una instancia de una actividad “singleTask” o “singleInstance”, por lo que se espera que esa instancia maneje todos los nuevos bashs. Una actividad de “instancia única” siempre está en la parte superior de la stack (ya que es la única actividad en la tarea), por lo que siempre está en posición de manejar la intención. Sin embargo, una actividad “singleTask” puede o no tener otras actividades encima en la stack. 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).

4 actividades en una tarea

Como nunca hay más de una instancia de la Actividad con cualquiera de los modos de inicio, 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 tu stack de actividades pertenece a una “tarea” de un 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í hay una buena publicación en el blog para obtener más información, así como crédito para la imagen: serie de actividades y tareas de Android : una introducción al modelo de componentes de la interfaz de usuario de Android

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 ya existe una instancia de la actividad en una tarea separada, el sistema enruta el bash 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 one instance de la actividad a la vez.

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

única instancia-

Igual que "singleTask" , excepto que el sistema no "singleTask" 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 .

singleTask y singleInstance solo pueden comenzar una tarea. Siempre están en la raíz de la stack 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 .