usando e gerenciando activitiesbacala/android/4 - gerenciandoactivity.pdf · uma vez interrompida,...
TRANSCRIPT
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,
● usuário pressiona o botão Voltar ou
● sua activity sinaliza sua própria destruição, chamando finish().
● O sistema pode destruir a Activity se
● 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 chave-valor.
● 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
34 2013
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.
}
@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.
}
}