Na página Fundamentos do aplicativo do guia do desenvolvedor Android:
Por padrão, todas as atividades em um aplicativo têm afinidade entre si - ou seja, há uma preferência de que todas pertençam à mesma tarefa.
Uma atividade "singleInstance" permanece sozinha como a única atividade em sua tarefa. Se ele iniciar outra atividade, essa atividade será iniciada em uma tarefa diferente, independentemente de seu modo de inicialização - como se FLAG_ACTIVITY_NEW_TASK estivesse no intent. Em todos os outros aspectos, o modo "singleInstance" é idêntico a "singleTask".
Conforme observado acima, nunca há mais de uma instância de uma atividade "singleTask" ou "singleInstance", portanto, espera-se que essa instância trate de todas as novas intents. Uma atividade "singleInstance" está sempre no topo da pilha (visto que é a única atividade na tarefa), portanto, está sempre em posição de lidar com a intenção. No entanto, uma atividade "singleTask" pode ou não ter outras atividades acima dela na pilha. Em caso afirmativo, ele não está em posição de lidar com a intenção e a intenção é descartada. (Mesmo que a intenção seja descartada, sua chegada faria com que a tarefa fosse para o primeiro plano, onde permaneceria.)
Como nunca há mais de uma instância da Activity em qualquer um dos modos de inicialização, o botão Voltar sempre o levará para a instância existente da Activity em seu caso.
Uma diferença importante é que "singleTask" não requer a criação de uma nova tarefa para as novas Activities que estão sendo iniciadas quando algo é selecionado. Nem terá que remover essa nova tarefa no botão Voltar a cada vez.
Uma vez que sua pilha de atividades pertence a uma "tarefa" de usuário, e não parece que você tem uma estrutura Intent intrincada onde singleInstance pode ser benéfico para sempre lidar com eles, eu sugeriria usar o modo de inicialização singleTask.
Aqui está uma boa postagem de blog para mais informações, bem como creditado pela imagem: Android Activities and Tasks series - Uma introdução ao modelo de componente de IU do Android
FLAG_ACTIVITY_CLEAR_TOP
.De uma forma simples-
singleTask:
O sistema cria uma nova tarefa e instancia a atividade na raiz da nova tarefa. No entanto, se uma instância da atividade já existir em uma tarefa separada, o sistema roteia o intent para a instância existente por meio de uma chamada para seu
onNewIntent()
método, em vez de criar uma nova instância. Apenasone instance
da atividade pode existir por vez.instância única-
O mesmo que
"singleTask"
, exceto que o sistema não inicia nenhuma outra atividade na tarefa que contém a instância . A atividade é sempre o único e único membro de sua tarefa; quaisquer atividades iniciadas por este abrem em uma tarefa separada .fonte
singleTask
e assingleInstance
atividades podem apenas iniciar uma tarefa. Eles estão sempre na raiz da pilha de atividades. Além disso, o dispositivo pode conter apenas uma instância da atividade por vez - apenas uma dessas tarefas.para mais android: launchMode .
fonte
singleTask
- O sistema cria uma nova tarefa e instancia a atividade na raiz da nova tarefa. No entanto, se uma instância da atividade já existir em uma tarefa separada, o sistema roteia o intent para a instância existente por meio de uma chamada para seuonNewIntent()
método, em vez de criar uma nova instância. Apenas uma instância da atividade pode existir por vez. para mais developer.android.com