A figura a seguir (do documento oficial ) descreve o conhecido ciclo de vida de uma atividade Android:
Por outro lado, quando a atividade é destruída pelo sistema (por exemplo, porque a memória precisa ser recuperada), o estado da atividade às vezes é automaticamente salvo e restaurado por meio dos métodos onSaveInstanceState()
e onRestoreInstanceState()
, conforme ilustrado pela figura a seguir (também do documento oficial ):
Estou ciente de que onSaveInstanceState()
é nem sempre chamado quando uma atividade está prestes a ser destruído. Por exemplo, se for destruído porque o usuário pressionou o botão "voltar", o estado de atividade não é preservado. Mas nos casos em que o estado é salvo e restaurado e onSaveInstanceState()
/ onRestoreInstanceState()
é chamado, quando exatamente eles são chamados ?
Por exemplo, de acordo com as figuras acima, onRestoreInstanceState()
pode ser chamado antes onStart()
ou depois, onStart()
mas antes onResume()
ou depois onResume()
. Da mesma forma, existem várias possibilidades para onSaveInstanceState()
. Então, quando eles são chamados exatamente?
Idealmente, o que eu gostaria é ver um diagrama combinado mostrando os estados do ciclo de vida da atividade e os métodos de salvar / restaurar , se houver.
fonte
Respostas:
Pela documentação :
fonte
Como por doc1 e doc2
fonte
Além das respostas já postadas, há uma mudança sutil introduzida no Android P, que é:
Fonte: docs
Quanto ao motivo dessa mudança, aqui está a resposta:
Fonte: docs
fonte
Do you know how will behave app that target P but runs on lower api?
Enquanto o aplicativo estiver sendo executado, digamos, no M, a versão do Android que este dispositivo possui não contém alterações, que são introduzidas em P, o que significa que independentemente de você ter especificado o alvo,P
você não verá diferente para dispositivos pré-P. espero que isso responda sua pergunta.Esta é uma informação extra para onSaveInstanceState (Bundle)
de docs
Portanto, é a implementação padrão para ..
fonte
// Este retorno de chamada é chamado apenas quando há uma instância salva anteriormente salva usando // onSaveInstanceState (). Restauramos algum estado em onCreate () enquanto podemos opcionalmente restaurar // outro estado aqui, possivelmente utilizável após onStart () ser concluído. // O pacote savedInstanceState é o mesmo usado em onCreate ().
fonte