Cursos / Informática para Internet / Dispositivos Móveis / Aula
Esse é o primeiro método a ser chamado quando uma Activity é inicializada e é o único dos callbacks que deve ser obrigatoriamente implementado em todas as Activities. Esse método deve ser utilizado para executar tarefas executadas apenas uma vez durante a execução de uma Activity. Um exemplo de ação que deve ser tomada nesse método é a inicialização da interface gráfica, bem como a definição das ações de clique e toque a serem tratadas pela Activity.
Existem três situações que nos levam à execução desse método. São elas:
Mas, como você deve imaginar, pode haver grandes diferenças no que deve ser feito por um método responsável por iniciar a Activity (primeiro caso) para um método que deve recuperá-la após a Activity ter sido encerrada pelo sistema (segundo e terceiro casos). Para onde vão os dados que o usuário já tinha adicionado à tela? Como recuperar a tela no estado em que estava e não criá-la novamente? Tudo isso pode ser resolvido pelo parâmetro passado ao método onCreate.
O parâmetro savedInstanceState é o responsável por salvar qualquer dado que seja importante para a Activity antes que ela seja encerrada e então, também através desse parâmetro, os dados são devolvidos à Activity através do seu método onCreate. Ou seja, caso o savedInstanceState seja nulo, a aplicação pode assumir que não há nenhum dado especial a ser carregado e então simplesmente carregar os dados iniciais. Caso esse parâmetro venha com algum valor dentro dele, pode-se então utilizar esse valor para restaurar o estado anterior da aplicação.
Para entender melhor esse parâmetro, pense em uma Activity que exibe ao usuário um calendário, um mês de cada vez. O usuário pode navegar dez meses para frente e então, após passar por todos esses meses, receber uma ligação. Por algum motivo, essa ligação toma memória demais do celular e a aplicação é então encerrada pelo sistema. Caso não haja o tratamento do valor desse parâmetro, o sistema irá recriar a aplicação mostrando o mês inicial e não o mês para o qual o usuário havia navegado. Mas, caso o programador tenha tido o cuidado de implementar o método para salvar o estado da aplicação antes da mesma se encerrar, é possível utilizar esse valor salvo para retornar o calendário diretamente ao mês para o qual o usuário havia navegado.
O método onSaveInstanceState(Bundle outState) é o método responsável por salvar esses dados importantes antes do encerramento da aplicação. Uma vez que a aplicação necessite ser encerrada por um motivo qualquer, o Android tenta chamar esse método antes de destruir a Activity. O parâmetro desse método pode então ser modificado com os dados que devem ser salvos antes da aplicação encerrar. Uma vez reiniciada, esse mesmo Bundle será passado para o onCreate, permitindo ao programador carregar qualquer dado salvo de volta na aplicação. A Listagem 3 tem o código do exemplo do calendário, citado anteriormente. É importante ressaltar que também nesse método é necessário chamar o super.
Perceba que, para a Listagem 3 funcionar, precisamos implementar uma classe Calendário. Como esse não é o objetivo dessa aula, veja a listagem apenas como um exemplo de utilização do método onSaveInstanceState().
Listagem 3 - Salvando e recuperando o estado da ActivityPerceba que no método onSaveInstanceState, o valor do mês atual é salvo dentro do Bundle para que, durante a recuperação da tela, a aplicação possa voltar ao mês que o usuário estava visualizando antes de encerrar-se a aplicação. Já no método onCreate, a aplicação testa se há algum valor salvo no Bundle. Caso haja algum valor lá, ela busca esse valor e altera o mês atual. Se o parâmetro passado for nulo, sabe-se então que é a primeira vez que a Activity está sendo criada, portanto o mês a ser mostrado no calendário é o atual. Salvar o estado da aplicação antes que ela seja encerrada é muito importante. Procure sempre detectar quais valores deverão ser salvos nas telas que você desenvolver!
Também é muito importante que o método onSaveInstanceState seja rápido em sua execução, uma vez que o sistema poderá utilizá-lo quando estiver precisando de recursos. Uma execução demorada desse método faria com que a liberação dos recursos fosse mais lenta e isso provavelmente resultaria em um travamento de alguma maneira para o usuário.
Versão 5.3 - Todos os Direitos reservados