Usando e Gerenciando Activities Ciclo de vida Activity 2 Especificando a execução ● ● Especifica a Activity que é ponto principal de entrada de sua aplicação Se a ação MAIN action ou a categoria LAUNCHER não for declarada para uma activity, o ícone não aparece na HOME 3 Método onCreate() ● Executa a lógica de inicialização da aplicação que deve ocorrer apenas uma vez para todo o ciclo de vida da activity 4 Método onCreate() ● Quando onCreate() termina a execução, o sistema chama onStart() e onResume(). ● ● ● A activity não reside nos estados criados ou iniciados. A activity se torna visível para o usuário quando onStart() é chamado, onResume() é rapidamente chamado em seguida ● activity permanece no estado de retomada até que algo aconteça para mudar, – uma chamada é recebida, – o usuário navega para outra activity , ou – a tela do dispositivo desliga-se. 5 Destruindo uma Activity ● ● O sistema chama onDestroy() como último sinal de que a activity está sendo completamente removida da memória do sistema. Nota: O sistema chama onDestroy() depois de onPause() e onStop() em todas as situações, exceto quando: ● Chamar finish() de dentro do onCreate() – – activity funciona temporariamente para lançar uma outra atividade o sistema chama imediatamente onDestroy() sem chamar qualquer um dos outros métodos de ciclo de vida. 6 Destruindo uma Activity ● ● A maioria dos aplicativos não precisam implementar o onDestroy(), porque as referências de classe locais são destruídos com a activity e sua activity deve executar a maioria de limpeza durante onPause() e onStop(). Se a activity inclui tópicos criados durante onCreate() ou outros recursos de longa duração que poderiam vazar memória se não forem devidamente fechado, eles devem ser destruídos durante onDestroy(). 7 Pausando e Retornando ● Activity do primeiro plano é obstruída por outros componentes visuais e provocam a pausa da Activity. ● ● ● Uma activity semitransparente abre (como um diálogo), a activity anterior pausa (OnPause). Enquanto a activity ainda é parcialmente visível, mas atualmente não é a activity em foco, permanece interrompida. No entanto, se a Activity for totalmente obstruída e ficar não é visível, ela para (onStop) 8 Pausando e Retornando ● ● A Activity entra no estado de pausa, o sistema chama o método onPause(), que permite parar ações que não devem continuar durante a pausa (como um vídeo) ou persistir alguma informação que deva ser salva. Se retornar a partir do estado de pausa, o sistema reinicia-a e chama o método onResume(). 9 Pausando ● Use onPause() para: ● ● ● Parar animações ou outras ações que podem consumir CPU. Confirmar alterações não salvas, caso tenham que ser permanentemente salvas quando saem. Liberar recursos do sistema: – broadcast receivers, handles para sensores (como GPS), ou outros recursos que afetem a vida útil da bateria e não necessários durante a pausa da atividade. 10 Pausando ● Exemplo: liberando o uso da camera 11 Pausando ● Não se deve usar onPause() para armazenar as alterações do usuário (como informações inseridas em um formulário) de modo permanente. ● ● Só faça armazenamento permanente dentro onPause() para alterações salvas automaticamente Procure manter a quantidade de operações realizadas no método onPause () relativamente simples, a fim de permitir uma transição rápida para o próximo destino caso sua atividade deva ser realmente interrompida. 12 Pausando Nota: ● ● Quando a activity é interrompida, uma instância dela é mantida residente na memória e recuperada quando a activity recomeça. Não é necessário reinicializar os componentes criados durante qualquer um dos métodos de retorno de chamada que antecederam o estado retomado. 13 Retornando ● ● Quando o usuário retoma suas activities a partir do estado de pausa, o sistema chama o método onResume(). O sistema chama este método cada vez que a activity vem para o primeiro plano, inclusive quando ele é criado pela primeira vez. 14 Retornando ● Use onResume() para inicializar os componentes liberados durante onPause() e executar outras inicializações que devem ocorrer cada vez que a atividade entra no estado de Resumed (iniciar animações, inicializar componentes utilizados apenas quando a atividade tem o foco do usuário). 15 Retornando 16 Parando e Reiniciando ● ● Garante que os usuários percebam que o aplicativo está sempre vivo e que não perde seu progresso. Cenários principais em que a Activity é parada e reiniciada: ● ● ● Usuário abre outro aplicativo. A atividade atualmente em primeiro plano fica parada. Se o usuário retorna a partir do ícone da tela inicial lançador ou a janela Apps, a atividade é reiniciada. Aplicativo que inicia uma nova atividade. A atividade atual é interrompido quando a segunda atividade é criada. Se o usuário pressiona o botão Voltar, a primeira atividade é reiniciada. Recebe um telefonema durante o uso do aplicativo em seu telefone. 17 Parando e Reiniciando ● ● ● Quando o usuário deixa a sua activity, o sistema chama onStop() para parar a activity (1). Se o usuário retorna ao passo que a activity está parado, o sistema chama onRestart() (2), rapidamente seguido por onStart() (3) e onResume() (4). Não importa o que ocorre ao parar, o sistema chama sempre onPause() antes de chamar onStop(). 18 Parando a activity ● Embora o método onPause() seja chamado antes onStop(), deve-se usar onStop() para executar operações maiores, que consomem mais CPU, como gravar informações em um banco de dados. 19 Parando a activity ● ● ● Quando sua activity é interrompida, ela é mantida residente na memória e recuperada quando recomeça. Não precisa reinicializar os componentes criados durante qualquer um dos métodos de retorno de chamada que antecederam o estado retomado. O sistema também mantém o controle do estado atual para cada exibição no layout ● se o usuário digitou texto em um widget EditText, seu conteúdo é retido para que não seja necessário salvar e restaurar. 20 Parando a activity Nota: ● Mesmo que o sistema destrua a activity enquanto parada, ele ainda mantém o estado de seus objetos de exibição (como texto em um EditText) em um Bundle e restaura quando o usuário navega de volta para a mesma instância da atividade 21 Parando a activity ● ● ● Quando a activity recebe uma chamada para o método onStop(), não está mais visível e deve liberar quase todos os recursos que não são necessários enquanto o usuário não a está usando. Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema. Em casos extremos, o sistema pode apenas matar o processo de aplicação sem chamar onDestroy da activity final, por isso é importante que usar onStop() para liberar recursos. 22 Recriando uma Atividade ● Existem situações em que a Activity é destruída devido a um comportamento normal aplicativo, ● ● ● sua activity sinaliza sua própria destruição, chamando finish(). O sistema pode destruir a Activity se ● ● ● usuário pressiona o botão Voltar ou estiver parada e não foi usada em um longo período de tempo ou a activity no primeiro plano requer mais recursos para que o sistema desligue os processos em background para recuperar a memória. 23 Recriando uma Atividade ● Quando uma Activity é destruída ou terminar por si mesmo, a instância da activity se vai para sempre, ● ● o comportamento indica que a activity não será mais necessária. Se o sistema destrói a activity devido a restrições do sistema (ao invés de um comportamento normal ), ele lembra que ela existia pois, ● se o usuário navegar de volta para ela, o sistema cria uma nova instância da activity utilizando o conjunto de dados gravados, que descreve o estado da activity quando foi destruído. 24 Recriando uma Atividade ● Os dados guardados que o sistema usa para restaurar o estado anterior é chamado de "estado da instância“ ● ● coleção de pares chave-valor armazenados em um objeto Bundle. Atenção: a activity será destruída e recriada cada vez que o usuário girar a tela. ● Quando a mudança de orientação da tela, o sistema destrói e recria a atividade de plano porque a configuração da tela mudou e sua activity pode precisar carregar recursos alternativos (tais como o layout). 25 Recriando uma Atividade ● ● ● ● O sistema utiliza o estado da instância Bundle para guardar informações sobre cada objeto View em seu layout (como o valor do texto inserido em um objeto EditText). Se a atividade é destruída e recriada, o estado do layout é restaurado ao seu estado anterior sem a exigência de nenhum código. No entanto, a atividade pode ter mais informações sobre o estado que você gostaria de restaurar, como variáveis membros que acompanham o progresso do usuário na atividade. IMPORTANTE: Para o sistema Android restaurar o estado das views da activity, cada view deve ter um ID único, fornecido pelo android: atributo id. 26 Recriando uma Atividade ● ● ● Para salvar dados adicionais sobre o estado de atividade, sobreponha o método de retorno onSaveInstanceState(). O sistema chama este método quando o usuário está deixando sua atividade e passa o objeto Bundle que será salvo no caso em que sua atividade é destruída de forma inesperada. Se o sistema recriar a instância de atividade mais tarde, ele passa o mesmo objeto Bundle tanto para os métodos onRestoreInstanceState() e onCreate(). 27 Recriando uma Atividade ● ● ● Ao iniciar a parada da atividade, o sistema chama onSaveInstanceState() (1). É possível especificar os dados de estado adicionais para salvar caso a atividade deva ser recriada. Se a activity é destruída e deve ser recriada, o sistema transfere os dados de estado definidos em (1) para so métodos onCreate() (2) e onRestoreInstanceState() (3). 28 Salvando o estado da Activity ● ● ● O sistema ao chamar onSaveInstanceState() salva as informações de estado com uma coleção de pares chavevalor. A implementação padrão desse método salva informações sobre o estado de hierarquia de vista da atividade, como o texto de um widget EditText ou a posição de rolagem de um ListView. Para salvar as informações de estado adicional para a sua atividade, você deve implementar onSaveInstanceState() e adicionar pares chave-valor para o objeto Bundle. 29 Salvando o estado da Activity ● Cuidado: Sempre chame a implementação de superclasse onSaveInstanceState() para a implementação padrão salvar o estado da hierarquia das Views 30 Restaurando o estado de uma Activity ● ● Tanto o método de retorno OnCreate() quanto onRestoreInstanceState() podem receber o Bundle que contém as informações de estado da instância. Como o método onCreate() é chamado para criar uma nova instância de sua activity ou recriar uma anterior, verifique se o Bundle é nulo antes de tentar lê-lo. ● Se for nulo, então o sistema está criando uma nova instância da atividade. 31 Restaurando o estado de uma Activity 32 Restaurando o estado de uma Activity ● ● Em vez de restaurar o estado durante onCreate(), pode-se usar onRestoreInstanceState(), chamado após o método onStart(). O sistema chama onRestoreInstanceState() somente se houver um estado salvo para restaurar, assim não é necessário verificar se o pacote é nulo. 33 Exercício • Faça um aplicativo para verificar o gerenciamento das activities. • Implemente os métodos onCreate, OnStop, etc... exibindo uma mensagem no Logcat public class ExampleActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // A activity é criada. } @Override protected void onStart { super.onStart(); // A activity será visível. } @Override protected void onResume { super.onResume(); // A activity tornou-se visível. }2013 @Override protected void onPause { super.onPause(); // Outra activity tem o foco na aplicação. } @Override protected void onStop { super.onStop(); // A activity não é mais visível. } @Override protected void onDestroy { super.onDestroy(); // A activity foi destruída. } 34 }