Qual é o ciclo de vida de uma atividade Android? Por que tantos métodos de som semelhante ( onCreate()
, onStart()
, onResume()
) chamada durante a inicialização, e tantos outros ( onPause()
, onStop()
, onDestroy()
) chamado no final?
Quando esses métodos são chamados e como devem ser usados corretamente?
Respostas:
Veja-o no Ciclo de Vida da Atividade (em Desenvolvedores Android).
onCreate () :
onRestart () :
onStart () :
onResume () :
onPause () :
onStop () :
onDestroy () :
Quando a atividade é carregada pela primeira vez, os eventos são chamados como abaixo:
Quando você clica no botão Telefone, a Atividade fica em segundo plano e os eventos abaixo são chamados:
Saia do discador do telefone e os eventos abaixo serão chamados:
Quando você clica no botão voltar OU tenta terminar () a atividade que os eventos são chamados como abaixo:
Estados de atividade
O sistema operacional Android usa uma fila de prioridade para ajudar no gerenciamento de atividades em execução no dispositivo. Com base no estado em que uma atividade específica do Android está, será atribuída uma certa prioridade no sistema operacional. Esse sistema prioritário ajuda o Android a identificar atividades que não estão mais em uso, permitindo que o sistema operacional recupere memória e recursos. O diagrama a seguir ilustra os estados pelos quais uma atividade pode passar durante sua vida útil:
Esses estados podem ser divididos em três grupos principais, da seguinte maneira:
Ativo ou em execução - as atividades são consideradas ativas ou em execução se estiverem em primeiro plano, também conhecidas como a parte superior da pilha de atividades. Essa é considerada a atividade de maior prioridade na pilha de atividades do Android e, como tal, só será eliminada pelo sistema operacional em situações extremas, como se a atividade tentar usar mais memória do que a disponível no dispositivo, pois isso pode fazer com que a interface do usuário deixar de responder.
Pausado - Quando o dispositivo entra no modo de suspensão ou uma atividade ainda é visível, mas parcialmente oculta por uma atividade nova, sem tamanho ou transparente, a atividade é considerada pausada. As atividades em pausa ainda estão ativas, ou seja, elas mantêm todas as informações de estado e membro e permanecem anexadas ao gerenciador de janelas. Essa é considerada a segunda atividade de maior prioridade na pilha de atividades do Android e, como tal, só será eliminada pelo sistema operacional se a eliminação dessa atividade atender aos requisitos de recursos necessários para manter a atividade ativa / em execução estável e responsiva.
Parado - As atividades que são completamente obscurecidas por outra atividade são consideradas paradas ou em segundo plano. As atividades interrompidas ainda tentam reter suas informações sobre o estado e os membros pelo maior tempo possível, mas as atividades interrompidas são consideradas a prioridade mais baixa dos três estados e, como tal, o sistema operacional eliminará as atividades nesse estado primeiro para atender aos requisitos de recursos de atividades de maior prioridade.
* Exemplo de atividade para entender o ciclo de vida **
fonte
Atividade tem seis estados
O ciclo de vida da atividade possui sete métodos
onCreate()
onStart()
onResume()
onPause()
onStop()
onRestart()
onDestroy()
Situações
Quando abrir o aplicativo
Quando o botão voltar pressionado e sair do aplicativo
Quando o botão home é pressionado
Depois de pressionar o botão home, quando abrir novamente o aplicativo da lista de tarefas recente ou clicar no ícone
Ao abrir um aplicativo, outro aplicativo na barra de notificação ou nas configurações abertas
O botão Voltar pressionado em outro aplicativo ou nas configurações usadas pode ver nosso aplicativo
Quando qualquer caixa de diálogo é aberta na tela
Depois de descartar a caixa de diálogo ou o botão voltar da caixa de diálogo
Qualquer telefone está tocando e o usuário no aplicativo
Quando o usuário pressionou o botão de atendimento do telefone
Após o término da chamada
Quando a tela do telefone está desligada
Quando a tela é ligada novamente
fonte
Toda a confusão é causada, já que o Google escolheu nomes não-intuitivos em vez de algo como a seguir:
O diagrama de atividades pode ser interpretado como:
fonte
CICLO DE VIDA ANDROID
Existem sete métodos que gerenciam o ciclo de vida de um aplicativo Android:
Responda para que servem todos esses métodos:
Vamos tomar um cenário simples em que saber em que ordem esses métodos são chamados nos ajudará a esclarecer por que eles são usados.
onCreate()
- - -> - - ->onStart()
onResume()
onPause()
- - ->onStop()
onRestart()
- - -> - - ->onStart()
onResume()
onStop()
- - ->onDestroy()
Existem quatro estados nos quais uma atividade pode existir:
O estado inicial envolve:
Criando um novo processo Linux, alocando nova memória para os novos objetos de interface do usuário e configurando a tela inteira. Portanto, a maior parte do trabalho está envolvida aqui.
O estado de execução envolve:
É a atividade (estado) que está atualmente na tela. Somente esse estado lida com coisas como digitar na tela e tocar e clicar nos botões.
O estado de pausa envolve:
Quando uma atividade não está em primeiro plano e, em vez disso, está em segundo plano, diz-se que a atividade está no estado de pausa.
O estado parado envolve:
Uma atividade parada só pode ser comprada em primeiro plano reiniciando-a e também pode ser destruída a qualquer momento.
O gerenciador de atividades lida com todos esses estados de forma que a experiência e o desempenho do usuário sejam sempre os melhores, mesmo em cenários em que a nova atividade é adicionada às atividades existentes
fonte
Gosto dessa pergunta e das respostas, mas até agora não há cobertura de retornos de chamada usados com menos frequência, como onPostCreate () ou onPostResume () . Steve Pomeroy tentou um diagrama incluindo estes e como se relacionam com o Android Fragmento ciclo de vida, em https://github.com/xxv/android-lifecycle . Revisei o diagrama grande de Steve para incluir apenas a parte Activity e o formatou para impressão de uma página em tamanho carta. Eu o publiquei como um PDF de texto em https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf e abaixo é a sua imagem:
fonte
Na página Desenvolvedores Android,
onPause ():
onStop ():
Agora, suponha que existam três atividades e você vá de A para B, a onPause de A será chamada agora de B para C, a onPause de B e a onStop de A serão chamadas.
A Atividade pausada obtém um resumo e Parado é reiniciado.
Quando você ligar
this.finish()
, onPause-onStop-onDestroy será chamado. O principal a lembrar é: as atividades pausadas são interrompidas e uma atividade interrompida é destruída sempre que o Android exigir memória para outras operações.Espero que esteja claro o suficiente.
fonte
Adicionando mais algumas informações sobre as respostas altamente classificadas (seção adicional adicionada de KILLABLE e próximo conjunto de métodos, que serão chamados no ciclo de vida):
Fonte: developer.android.com
Observe a coluna " Matável " na tabela acima - para os métodos marcados como matáveis, após o retorno desse método, o processo que hospeda a atividade pode ser eliminado pelo sistema a qualquer momento, sem que outra linha de seu código seja executada.
Por esse motivo, você deve usar o
onPause()
método para gravar quaisquer dados persistentes (como edições do usuário) no armazenamento. Além disso, o métodoonSaveInstanceState(Bundle)
é chamado antes de colocar a atividade em um estado de segundo plano, permitindo salvar qualquer estado dinâmico da instância em sua atividade no dadoBundle
, para ser recebido posteriormenteonCreate(Bundle)
se a atividade precisar ser recriada.Observe que é importante salvar dados persistentes em
onPause()
vez de,onSaveInstanceState(Bundle)
porque estes não fazem parte dos retornos de chamada do ciclo de vida, portanto, não serão chamados em todas as situações, conforme descrito em sua documentação.Eu gostaria de adicionar mais alguns métodos. Eles não são listados como métodos de ciclo de vida, mas serão chamados durante o ciclo de vida, dependendo de algumas condições. Dependendo do seu requisito, pode ser necessário implementar esses métodos em seu aplicativo para o manuseio adequado do estado.
Meu código de aplicativo usando todos esses métodos:
Atividade de login:
saída: (Antes da pausa)
saída: (Após retomar da pausa)
Observe que
onPostResume()
é chamado mesmo que não seja citado como método de ciclo de vida.fonte
Eu corro alguns logs como por respostas acima e aqui está a saída:
Atividade inicial
Parando a atividade
Na minha opinião pessoal, apenas dois são necessários onStart e onStop.
onResume parece estar em todos os casos de retorno e onPause em todos os casos de saída (exceto para o fechamento do aplicativo).
fonte