Controlando o reinício da Atividade Android após a interrupção de um processo

Meu aplicativo está sendo executado em um dispositivo especial que está executando uma compilação personalizada do Android Gingerbread 2.3.7

Existem condições em que o sistema encerrará meu aplicativo. Presumo que o fabricante do dispositivo considere essas situações de emergência em que todos os aplicativos de terceiros devem ser desligados imediatamente para que o dispositivo possa executar suas tarefas principais.

Posso duplicar o comportamento que vejo no dispositivo usando um emulador e no DDMS selecionando minha tarefa e clicando no botão "Stop Process". Aqui está o comportamento que eu vejo.

Meu aplicativo normalmente percorre quatro atividades, a Atividade A inicia a atividade B, B inicia a Atividade C e C inicia a atividade D. Portanto, quando a atividade D está em execução no topo, minha pilha é:

A - B - C - D

Se, nesse ponto, o processo for finalizado, a Atividade D não receberá a chamada onPause () ou onStop (). Não tem oportunidade de salvar seu estado.

Após o término do processo, o ActivityManager do Android inicia uma nova tarefa para o meu aplicativo e inicia a Atividade C. Acho que esse é o comportamento padrão do Android para reiniciar os aplicativos com falha.

Minha pergunta é: posso controlar esse comportamento de reinicialização? Se o Android for reiniciar meu aplicativo, preciso que a pilha de atividades seja restaurada. A atividade C não faz sentido ser executada sozinha (clicar no botão voltar sairia do aplicativo e isso não faz sentido para essa atividade).

Posso impedir essa reinicialização? Posso fazer com que o reinício inicie todas as minhas atividades em sequência? Posso reiniciar apenas iniciar a atividade A?

Eu encontrei issodiscussão interessante que acredito que explica por que a Atividade C é reiniciada e não a Atividade D.

Na medida em que uma atividade é reiniciada - se o processo que está executando a atividade em primeiro plano desaparecer, o sistema descartará essa atividade se não tiver um estado salvo válido para ela (normalmente significa que está em pausa e deu ao sistema a resultado de onSaveInstanceState antes da pausa). Depois de decidir se deve ou não jogar fora essa atividade, ela retomará qualquer atividade que estiver agora no topo da pilha. Se essa é uma de suas atividades - seja porque você tem outra por trás da que caiu ou de alguma forma foi o estado de pausa resolvida -, o processo será iniciado novamente para mostrar a atividade principal.

E algumas perguntas semelhantes, comoImpedir que a pilha de atividades seja restaurada? e isso interessantefio

questionAnswers(1)

yourAnswerToTheQuestion