Olá, estou me perguntando como o Android está gerenciando a memória e não consigo encontrar uma resposta precisa em qualquer lugar. Vamos supor que eu tenha um aplicativo com 5 atividades na pilha de atividades atual (4 paradas e 1 retomada), não há nenhum serviço conectado. Eu pressiono o botão INÍCIO para que todas as minhas atividades sejam interrompidas. Eu inicio algum outro aplicativo que consome memória e a memória geral do dispositivo está começando a ficar baixa. E a questão é
... O que acontecerá com meu aplicativo?
- O sistema pode destruir apenas uma ou algumas das minhas atividades para recuperar a memória?
- O sistema interromperá todo o processo do meu aplicativo? Todas as atividades serão bem destruídas?
- O que acontecerá quando eu voltar ao meu aplicativo quando ele estiver totalmente desativado? Começará do início (como a primeira inicialização) ou tentará recuperar as atividades ao estado anterior / se sim - é apenas a que está no topo da pilha ou todas elas?
ATUALIZAR:
Antes de fazer esta pergunta, eu vi o ciclo de vida da atividade algumas vezes, mas não tem respostas para minhas perguntas. Fiz alguns testes e tenho algumas respostas. "Parar o processo" no DDMS era uma pista para o teste.
Não testei a resposta para a pergunta 1, mas como o guia diz:
Se uma atividade for pausada ou interrompida, o sistema pode eliminar a atividade da memória pedindo que ela seja concluída ou simplesmente eliminando seu processo.
Parece que uma ou mais atividades podem ser destruídas suavemente (com o método onDestroy) sem interromper o processo. Você simplesmente obterá (onCreate + bundle) quando voltar para eles.
Resposta da pergunta 2:
SIM. Geralmente, o sistema elimina todo o processo, o que significa que todos os dados, incluindo atividades e campos estáticos, são destruídos. Isso NÃO é feito corretamente - você não conseguirá onDestroy ou finialize () para nenhuma de suas atividades pausadas / interrompidas. É por isso que saveInstanceState () é chamado antes do método onPause. onPause é basicamente o último método em que você deve salvar algo porque depois desse método você nunca mais poderá ver onStop ou onDestroy. O sistema pode simplesmente matar o processo, destruindo todos os seus objetos, o que quer que eles contenham e o que quer que estejam fazendo.
Resposta da pergunta 3:
O que acontecerá quando você voltar para um aplicativo desativado?
- Antes do Android 2.2 - o aplicativo começará do início, com a atividade do iniciador.
- A partir de 2.2 - o sistema restaurará o estado anterior do aplicativo. O que isso significa? Isso significa que a última atividade visível será recriada (onCreate + bundle). O que acontecerá com a pilha de atividades? Stack está bem, mas todas as atividades nele estão mortas. Cada um deles será recriado (onCreate + bundle) quando você voltar a ele com o botão Voltar. Há mais uma coisa sobre isso:
Normalmente, o sistema limpa uma tarefa (remove todas as atividades da pilha acima da atividade raiz) em certas situações quando o usuário seleciona novamente essa tarefa na tela inicial. Normalmente, isso é feito se o usuário não visita a tarefa por um determinado período de tempo, como 30 minutos.
Conclusão?
- Não pense que lidar com problemas de rotação de atividades pode ser resolvido pelo android: configChanges = "idance ". Ao fazer isso, você terá muitos outros problemas dos quais nem mesmo está ciente.
- Teste seu aplicativo com DDMS - botão Parar processo. Veja isso
- Tenha cuidado ao usar variáveis estáticas. Não pense que quando você os inicializou na atividade 1 - você os terá inicializado na atividade 2. O único lugar seguro para inicializar a estática global seria a classe de aplicativo.
- Lembre-se de que você nunca verá onStop ou onDestroy. Feche arquivos / bancos de dados, pare os downloaders em onPause. Quando você quiser que o aplicativo faça algo no BG - use o serviço de primeiro plano.
Seria isso ... Espero ter ajudado com meu ensaio :)