salvar e restaurar a instância Estado facilitado!
como um iniciante fazendo aplicativos simples, você pode notar durante o teste que a rotação de tela repõe todos os dados coletados do Usuário. A rotação de tela é uma das muitas mudanças do ciclo de vida no Android que pode destruir e recriar a atividade e fazer com que todos os dados sejam perdidos! Não é uma grande experiência de utilizador.
para preparar a sua aplicação para estas alterações ao ciclo de vida da actividade existem dois métodos que pode adicionar à actividade principal para salvar e restaurar os dados:
- onsaveinstancestato ()
- onrestoreinstancestato()
o método onSaveInstanceState() permite-lhe adicionar pares chave/valor ao estado exterior da aplicação. Em seguida, o método onRestoreInstanceState() lhe permitirá recuperar o valor e configurá-lo de volta para a variável a partir da qual foi originalmente coletado.
para preparar o seu aplicativo para usar estes, é importante criar variáveis de instância para todos os dados que precisarão ser preservados quando o estado do aplicativo faz com que a atividade seja destruída. Estas variáveis estão fora de qualquer método e acessíveis a partir de qualquer lugar da classe.
Você também vai querer identificar os pontos de vista que apresentar esses dados para o usuário e indicar que você deseja que os dados continuam a ser exibida aqui, quando a Atividade é restaurada com o atributo:
android:freezesText="true"
onSaveInstanceState():
Este método é chamado antes de onStop() em versões mais antigas do Android e pode ser chamado depois de onStop() para as versões mais recentes.
1 @Override
2 protected void onSaveInstanceState(Bundle outState) {
3 super.onSaveInstanceState(outState);
4 outState.putInt("AStringKey", variableData);
5 outState.putString("AStringKey2", variableData2);
6 }
vamos quebrar este método:
- a substituição na linha um, indica que você vai substituir a declaração padrão do método.
- a assinatura do método na linha dois começa com o modificador de acesso “protegido”, isto indica que o método só pode ser acessado dentro da própria classe, o pacote, ou uma subclasse. O tipo de retorno para este método é “vazio”, uma vez que não irá retornar quaisquer dados. O parâmetro que este método recebe é um objeto Tipo Pacote chamado outState.
- uma vez que estamos sobrepondo este método padrão, devemos usar super (na linha três) para armazenar todos os dados padrão fora do estado.Na linha quatro, você pode começar a armazenar seus próprios dados. onSavedInstanceState() é chamado usando notação de ponto no estado externo do aplicativo. O primeiro argumento é qualquer String e é usado como uma chave (semelhante à definição de uma variável) para acessar o valor que você armazena no segundo argumento. Aqui temos fornecido uma variável de instância que está armazenando um valor inteiro. A linha de aviso cinco é muito semelhante, com a exceção de que uma variável do tipo String está sendo salva no estado exterior.
onrestoreinstancestato ():
este método é chamado após onStart().
1 @Override
2 protected void onRestoreInstanceState(Bundle savedInstanceState){
3 super.onRestoreInstanceState(savedInstanceState);
4 variableData = savedInstanceState.getInt("AStringKey");
5 variableData2 = savedInstanceState.getString("AStringKey2");
6 }
separe este método:
- o cancelamento na linha Um, indica que você vai anular a declaração padrão do método.
- a assinatura do método na linha dois começa com o modificador de acesso “protegido” isto indica que o método só pode ser acessado dentro da própria classe, o pacote, ou uma subclasse. O tipo de retorno para este método é “vazio”, uma vez que não irá retornar quaisquer dados. O parâmetro que este método recebe é um objeto Tipo Pacote chamado savedInstanceState.
- uma vez que estamos sobrepondo este método padrão, devemos usar super, na linha três, para restaurar todos os dados padrão savedInstanceState.
- uma vez que guardou os dados relevantes das suas aplicações em variáveis de exemplo, você configura os dados que salvou no exterior para a variável, invocando um método get no savedInstanceState usando a notação dot e fornece a chave String usada para armazenar os dados como argumento.
espero que esta explicação o ajude a compreender melhor estes métodos e como os utilizar. Para mais informações, visite a documentação de atividades do Android.
Happy Coding!