usando e gerenciando activitiesbacala/android/4 - gerenciandoactivity.pdf · uma vez interrompida,...

34
Usando e Gerenciando Activities

Upload: others

Post on 12-Jun-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

Usando e Gerenciando Activities

Page 2: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

Ciclo de vida Activity

2

Page 3: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 4: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 5: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 6: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 7: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 8: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 9: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 10: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 11: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

Pausando

● Exemplo: liberando o uso da camera

11

Page 12: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 13: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 14: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 15: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 16: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

Retornando

16

Page 17: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 18: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 19: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 20: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 21: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 22: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 23: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 24: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 25: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 26: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 27: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 28: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 29: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 30: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 31: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 32: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

Restaurando o estado de uma Activity

32

Page 33: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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

Page 34: Usando e Gerenciando Activitiesbacala/ANDROID/4 - GerenciandoActivity.pdf · Uma vez interrompida, o sistema pode destruir a instância se ele precisar recuperar a memória do sistema

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.

}

}