Problema no pedido da pilha de atividades ao iniciar o aplicativo no instalador de aplicativos Android e na tela inicial

Apenas para fins de teste, estou permitindo que o APK do aplicativo seja baixado e instalado por meio de um URL. Depois de baixado no telefone, ele pode ser iniciado com o instalador do aplicativo Android, que oferece ao usuário a opção de instalá-lo no dispositivo e executá-lo.

Considere se tivermos baixado e executado o aplicativo da maneira descrita acima. A atividade principal / iniciante no meu aplicativo é uma página de login Activity A). Depois que o usuário é autenticado, ele é levado para a área principal do aplicativo, por exemploActivity B. Então agora a pilha de atividades atual desta tarefa éA > B.

Em seguida, pressiono o botão inicial no telefone e sou levado para a tela inicial do Android. Reinicio meu aplicativo por meio do ícone no menu e sou levado paraActivity A, ao invés deActivity B. A pilha de atividades agora éA > B > A, ou agora existem duas tarefas separadas com pilhas de atividadesA > B eA respectivamente. O que eu quero é ser levado de volta paraActivity B quando reiniciar o aplicativo. Pressionar para trás enquanto estiver nesse estado me levará de volta paraActivity B.

Este comportamento indesejado só acontece se eu abrir o aplicativo pela primeira vez pelo instalador, e não se eu abrir o aplicativo pela tela inicial / men

Examinei como as atividades estão sendo iniciadas por cada mecanismo. Quando usamos o instalador do aplicativo, vemos os seguintes logs:

INFO/ActivityManager(XXXX): Starting activity: Intent { dat=file:///mnt/sdcard/download/[my app].apk cmp=com.android.packageinstaller/.InstallAppProgress (has extras) }
INFO/ActivityManager(XXXX): Starting activity: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=[my package]/[Activity A] }

via launcher / tela inicial:

INFO/ActivityManager(XXXX): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=[my package]/[Activity A] }

Quando iniciado com o instalador, vemos que ele está usando a bandeira0x10000000, mas quando iniciado com o iniciador, vemos que ele está usando0x10200000. Também está usando uma categoria de intenção.

De docs vemos as bandeiras são:

public static final int FLAG_ACTIVITY_NEW_TASK
Constant Value: 268435456 (0x10000000)

public static final int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
Constant Value: 2097152 (0x00200000)

A bandeiraFLAG_ACTIVITY_RESET_TASK_IF_NEEDED (que está sendo usado quando o aplicativo é iniciado a partir do iniciador) normalmente evita que uma nova tarefa seja criada, se já existe, e restaura a última atividade usada. Esse é o comportamento desejado. Por que não está funcionando nessa situação? Há algo que eu possa fazer para garantir que meu aplicativo sempre retorne à última Atividade, independentemente de ter sido iniciada pelo instalador / iniciador de aplicativos?

Se eu usarsingleTask sempre me levará de volta à atividade principal Activity A) sempre que executo o aplicativo (o que também não é desejável

Aqui está uma pergunta que encontrei onde alguém está enfrentando um problema semelhante (que não tem resposta aceita): @App perde a capacidade de lembrar sua pilha quando iniciado a partir de outro aplicativ

EDIT: Verificando a bandeiraFLAG_ACTIVITY_BROUGHT_TO_FRONT emonCreate() da nossa atividade do iniciador (e, em seguida, finalizando se estiver definido) parece corrigir o sintoma principal, mas claramente o problema subjacente ainda está lá. Existe uma correção mais completa?

EDIT2: o mesmo resultado ocorre quando você baixa / executa o aplicativo no Android Market, portanto, alguns dos detalhes acima podem não ser relevante

questionAnswers(3)

yourAnswerToTheQuestion