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