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:

  1. onsaveinstancestato ()
  2. 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:

  1. a substituição na linha um, indica que você vai substituir a declaração padrão do método.
  2. 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.
  3. 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:

  1. o cancelamento na linha Um, indica que você vai anular a declaração padrão do método.
  2. 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.
  3. 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.
  4. 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!