Não consigo entender o significado do onStart()
estado de transição. O onResume()
método é sempre chamado depois onStart()
. Por que não pode ser onResume()
chamado depois onRestart()
e onCreate()
métodos excluídos onStart()
? Qual é seu propósito?
Por que não podemos viver sem onStart()
. Ainda o considero redundante (provavelmente porque não entendo completamente seu significado).
Respostas:
OK, como minha primeira resposta foi bem longa, não vou estendê-la ainda mais, então vamos tentar isso ...
ATENÇÃO: Eu deliberadamente deixei de lado as chamadas para coisas como
super.onCreate(...)
etc. Isso é pseudo-código, então me dê uma licença artística aqui. ;)Os métodos para
DriveToWorkActivity
seguir ...OK, então é outra longa (desculpe pessoal). Mas aqui está a minha explicação ...
onResume()
é quando eu começo a dirigir eonPause()
é quando eu paro temporariamente. Então eu dirijo e chego a um sinal vermelho, então paro ... a luz fica verde e eu recomeço. Outra luz vermelha e eu paro, depois verde, para continuar. OonPause() -> onResume() -> onPause() -> onResume()
ciclo é apertado e ocorre muitas vezes ao longo da minha jornada.O loop de parar novamente através de um reinício (preparando-se para continuar minha jornada) e começar de novo é talvez menos comum. Em um caso, localizo a mercearia e ela
GroceryStoreActivity
é iniciada (forçando-DriveToWorkActivity
a a ponto deonStop()
). Quando volto da loja, passoonRestart()
e retomoonStart()
minha jornada.Eu poderia colocar o código que está
onStart()
dentro dos doisonCreate()
e semonRestart()
me preocupar em substituironStart()
, mas quanto mais isso precisa ser feito entreonCreate() -> onResume()
eonRestart() -> onResume()
, mais estou duplicando as coisas.Então, para cotar mais uma vez ...
Se você não substituir
onStart()
, é efetivamente o que acontece. Embora oonStart()
método deActivity
seja chamado implicitamente, o efeito no seu código é efetivamenteonCreate() -> onResume()
ouonRestart() -> onResume()
.fonte
onCreate()
eonRestart()
compartilhariam muito código comum, certo?Activity
ciclo de vida pode ser usado. O estágio de criaçãoonCreate(...)
pode muito bem quando se trata de instanciar membros da instância (elementos da interface do usuário, etc.), mas uma 'reinicialização' não deve ser necessária. Na realidade, muitosActivities
realmente não precisam implementar mais do queonCreate(...)
,onResume()
eonPause()
os outros métodos estão disponíveis para casos em que você pode precisar fazer outras coisas e a chave é entender onde colocar o código.Activity
métodos do ciclo de vida - é o sistema operacional Android que o faz e o faz com muita eficiência (supondo que o desenvolvedor do aplicativo saiba o que está fazendo e também codifique com eficiência). Se você desenvolver muito o desenvolvimento do Android, perceberá por que as coisas funcionam da maneira que funcionam - não é 100% perfeito, mas é muito bom.onStart
eonResume
é a de 'visibilidade' e 'interação do usuário'. Essa metáfora de dirigir um carro é confusa e não é realmente útil.Resposta curta:
Não podemos viver sem o onStart, porque esse é o estado em que a atividade se torna "visível" para o usuário, mas o usuário não pode "interagir" com ela, mas pode ser porque se sobrepôs a outra pequena caixa de diálogo. Essa capacidade de interagir com o usuário é a que diferencia onStart e onResume. Pense nisso como uma pessoa atrás de uma porta de vidro. Você pode ver a pessoa, mas não pode interagir (conversar / ouvir / apertar as mãos) com ela. O OnResume é como o abridor de portas após o qual você pode iniciar a interação.
Além disso, onRestart () é o menos compreendido. Podemos fazer a pergunta sobre por que não ir diretamente para onStart () ou onResume () depois de onStop () em vez de onRestart (). Torna-se mais fácil entender se notarmos que onRestart () é parcialmente equivalente a onCreate () se a parte de criação for omitida. Basicamente, ambos os estados levam a onStart () (ou seja, a atividade se torna visível). Portanto, ambos os estados precisam "preparar" o material a ser exibido. O OnCreate tem a responsabilidade adicional de "criar" o material a ser exibido
Portanto, suas estruturas de código podem se encaixar em algo como:
Toda a confusão é causada porque o Google escolheu nomes não intuitivos em vez de algo da seguinte maneira:
O diagrama de atividades pode ser interpretado como:
fonte
onStart()
chamado quando a atividade está se tornando visível para o usuário.onResume()
chamado quando a atividade começará a interagir com o usuário. Você pode querer fazer coisas diferentes nesses casos.Veja este link para referência.
fonte
onResume()
é chamado:onStart()
Activity
trata de primeiro plano.Em http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle :
fonte
O livro "Olá, Android, Apresentando a Plataforma de Desenvolvimento Móvel do Google" fornece uma boa explicação do ciclo de vida dos aplicativos Android. Felizmente, eles têm o capítulo específico online como um trecho. Veja o gráfico na página 39 em http://media.pragprog.com/titles/eband3/concepts.pdf
A propósito, este livro é altamente recomendável para iniciantes no Android!
fonte
Um exemplo particularmente enérgico é quando você decide mostrar um Diálogo gerenciado de uma Atividade usando
showDialog()
. Se o usuário girar a tela enquanto a caixa de diálogo ainda estiver aberta (chamamos isso de "alteração de configuração"), a Atividade principal passará por todas as chamadas de ciclo de vida atéonDestroy()
que sejam concluídas , será recriada e retornará pelos ciclos de vida. O que você não pode esperar, no entanto, é queonCreateDialog()
eonPrepareDialog()
(os métodos chamados quando você o fazshowDialog()
e agora novamente automaticamente para recriar a caixa de diálogo - automaticamente por ser uma caixa de diálogo gerenciada) são chamados entreonStart()
eonResume()
. A dica aqui é que a caixa de diálogo não cobre a tela inteira e, portanto, deixa visível parte da atividade principal. É um detalhe, mas importa!fonte
onStart()
onStart()
para monitorar alterações que afetam sua interface do usuário. É necessário cancelar o registro em onStop ()onResume()
onStart()
normalmente despacha o trabalho para um encadeamento em segundo plano, cujos valores de retorno são:START_STICKY para reiniciar automaticamente se for morto, para mantê-lo ativo.
START_REDELIVER_INTENT
para reinicialização automática e tente novamente se o serviço foi interrompido antes de stopSelf ().onResume()
é chamado pelo sistema operacional depois que o dispositivo entra em suspensão ou após um alerta ou outra atividade filho em tela parcial deixar visível uma parte da janela anterior, portanto é necessário um método para reinicializar os campos (em uma estrutura de tentativa com várias exceções) ) Tal situação não faz comonStop()
que seja invocada quando a criança se fecha.onResume()
é chamado semonStart()
quando a atividade é retomada em segundo planoPara obter mais detalhes, você pode visitar Android_activity_lifecycle_gotcha e ciclo de vida da atividade
fonte
Esperemos que uma explicação simples: -
onStart () -> chamado quando a atividade se torna visível, mas pode não estar em primeiro plano (por exemplo, um AlertFragment está no topo ou qualquer outro caso de uso possível).
onResume () -> chamado quando a atividade está em primeiro plano ou o usuário pode interagir com a atividade.
fonte
onStart()
significa queActivity
entrou no estado visível e o layout é criado, mas não pode interagir com esse layout de atividade.Resume()
significa que agora você pode interagir com o layout da atividade.fonte
Observe que há coisas que acontecem entre as chamadas para onStart () e onResume (). Ou seja, onNewIntent (), que eu descobri dolorosamente.
Se você estiver usando o sinalizador SINGLE_TOP e enviar alguns dados para sua atividade, usando extras de intenção, poderá acessá-los apenas em onNewIntent (), que é chamado após onStart () e antes de onResume (). Geralmente, você pega os novos dados (talvez apenas modificados) dos extras e os define para alguns membros da classe ou usa setIntent () para definir a nova intenção como a atividade original e processar os dados em onResume ().
fonte
Referência a http://developer.android.com/training/basics/activity-lifecycle/starting.html
onResume()
Chamado imediatamente antes da atividade começar a interagir com o usuário. Nesse ponto, a atividade está no topo da pilha de atividades, com a entrada do usuário. Sempre seguido poronPause()
.onPause()
Chamado quando o sistema está prestes a começar a retomar outra atividade. Esse método geralmente é usado para confirmar alterações não salvas em dados persistentes, interromper animações e outras coisas que possam estar consumindo CPU e assim por diante. Ele deve fazer o que fizer muito rapidamente, porque a próxima atividade não será retomada até que retorne. Seguido poronResume()
se a atividade retornar para a frente ou poronStop()
se tornar invisível para o usuário.fonte
Não tenho certeza se isso conta como resposta - mas aqui está o vídeo do YouTube do curso do Google (Desenvolvendo aplicativos Android com Kotlin) que explica a diferença.
fonte