O que salvar e o que não salvar?
Já se perguntou por que o texto no EditText
é salvo automaticamente enquanto uma orientação muda? Bem, esta resposta é para você.
Quando uma instância de uma Atividade é destruída e o Sistema recria uma nova instância (por exemplo, alteração na configuração). Ele tenta recriá-lo usando um conjunto de dados salvos do antigo Activity Activity ( estado da instância ).
O estado da instância é uma coleção de pares de valores-chave armazenados em um Bundle
objeto.
Por padrão, o sistema salva os objetos View no Bundle, por exemplo.
- Texto em
EditText
- Role a posição em a
ListView
, etc.
Se você precisar que outra variável seja salva como parte do estado da instância, você deverá substituir o onSavedInstanceState(Bundle savedinstaneState)
método.
Por exemplo, int currentScore
em um GameActivity
Mais detalhes sobre o onSavedInstanceState (Bundle savedinstaneState) ao salvar dados
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
Portanto, por engano, se você esquecer de chamar
super.onSaveInstanceState(savedInstanceState);
o comportamento padrão, não funcionará, ou seja, o texto no EditText não será salvo.
Qual escolher para restaurar o estado da atividade?
onCreate(Bundle savedInstanceState)
OU
onRestoreInstanceState(Bundle savedInstanceState)
Ambos os métodos obtêm o mesmo objeto Bundle, portanto, não importa onde você escreve sua lógica de restauração. A única diferença é que, no onCreate(Bundle savedInstanceState)
método, você terá que fazer uma verificação nula enquanto não for necessária no último caso. Outras respostas já possuem trechos de código. Você pode encaminhá-los.
Mais detalhes sobre o onRestoreInstanceState (Bundle savedinstaneState)
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
// Restore state members from the saved instance
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
}
Sempre chame super.onRestoreInstanceState(savedInstanceState);
para que o sistema restaure a hierarquia Exibir por padrão
Bônus
O onSaveInstanceState(Bundle savedInstanceState)
é invocado pelo sistema somente quando o usuário pretende retornar à Atividade. Por exemplo, você está usando o App X e, de repente, recebe uma ligação. Você passa para o aplicativo chamador e volta para o aplicativo X. Nesse caso, oonSaveInstanceState(Bundle savedInstanceState)
método será chamado.
Mas considere isso se um usuário pressionar o botão Voltar. Supõe-se que o usuário não pretenda voltar à Atividade, portanto, neste caso onSaveInstanceState(Bundle savedInstanceState)
, não será invocado pelo sistema. Aponte que você deve considerar todos os cenários ao salvar dados.
Links relevantes:
Demonstração do comportamento padrão da
documentação oficial do Android .