Desde la página de conceptos básicos 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, se prefiere que todas pertenezcan a la misma tarea.
Una actividad de "singleInstance" es la única actividad en su tarea. Si inicia otra actividad, esa actividad se iniciará en una tarea diferente independientemente de su modo de inicio, como si FLAG_ACTIVITY_NEW_TASK estuviera en la intención. En todos los demás aspectos, el modo "singleInstance" es idéntico a "singleTask".
Como se indicó 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 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 la intent. Sin embargo, una actividad de "singleTask" puede tener o no otras actividades por encima de ella en la pila. Si lo hace, no está en posición de manejar la intención y la intención se descarta. (Aunque se descarta la intención, su llegada habría provocado que la tarea pasara a primer plano, donde permanecería).
Dado que 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 inician 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 estructura de intención intrincada donde singleInstance puede ser beneficioso para manejarlos siempre, sugeriría usar el modo de inicio singleTask.
Aquí hay una buena publicación de blog para obtener más información, así como la imagen acreditada: Serie de actividades y tareas de Android : una introducción al modelo de componente de interfaz de usuario de Android
FLAG_ACTIVITY_CLEAR_TOP
.De una manera sencilla
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 intención a la instancia existente a través de una llamada a su
onNewIntent()
método, en lugar de crear una nueva instancia. Solo una parteone instance
de la actividad puede existir a la vez.única instancia-
Igual que
"singleTask"
, excepto que el sistema no inicia ninguna otra actividad en la tarea que contiene la instancia . La actividad es siempre el único miembro de su tarea; cualquier actividad iniciada por este se abre en una tarea separada .fuente
singleTask
y lassingleInstance
actividades solo pueden comenzar una tarea. Siempre están en la raíz de la pila de actividades. Además, el dispositivo puede contener solo una instancia de la actividad a la vez, solo una de esas tareas.para más android: launchMode .
fuente
singleTask
: el sistema crea una nueva tarea e instancia 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 intención a la instancia existente a través de una llamada a suonNewIntent()
método, en lugar de crear una nueva instancia. Solo puede existir una instancia de la actividad a la vez. para obtener más información developer.android.com