Entendendo o ciclo de vida - App e ViewController

Andrew Castro
Aug 23, 2019 · 5 min read

Introdução

Os ciclos de vida do aplicativo e da ViewController (tela do app) são muito importantes durante o desenvolvimento, podendo ser pontos vitais para uma experiência agradável do usuário. Sendo assim, este artigo prevê explicar de maneira clara e precisa todos os pontos dos estados e métodos que o aplicativo e a ViewController utilizam.

Estado do aplicativo

  • Não está sendo executado
    O aplicativo não foi aberto ou foi fechado pelo sistema. Ele está instalado no aparelho mas não está sendo executado.
  • Inativo
    O aplicativo está sendo executado em foreground, mas não está recebendo eventos (pode estar executando código). O aplicativo costuma fica nesse estado em um intervalo muito rápido enquanto transita para o próximo.
  • Ativo
    O aplicativo está sendo executado em foreground e começa a receber eventos. É o estado em que o usuário está usando o aplicativo.
  • Background
    O aplicativo está em background e executando código. Fica nesse estado por um curto período de tempo enquanto é preparado para o próximo estado. Pode ser solicitado um tempo a mais de execução e também pode ser carregado direto nesse estado ao em vez do inativo.
  • Suspenso
    O aplicativo está em background mas não está executando código. O sistema move o aplicativo para esse estado mas não notifica o usuário ao fazer. Enquanto suspenso, o aplicativo permanece em memória mas não executa nenhum código.
    Caso ocorra uma condição de baixa memória, o sistema pode move o aplicativo para o estado de ‘Não está sendo executado’, assim liberando memória.

Quando o aplicativo não está sendo executado

  • Ciclo de vida:

Quando o usuário clica no aplicativo, ele entra em foreground, no primeiro momento se mantém no estado inativo e posteriormente passa para ativo. Pode ocorrer de entrar em background, caso o usuário deseje sair do aplicativo, e em sequência entra no estado suspenso.

Se o usuário clicar no aplicativo novamente ele repete o loop.

Abertura do aplicativo

  • Ciclo de vida:

O método main() do iOS não é manipulado mas é executado quando o usuário abre o aplicativo, e na sequência, ele chama o UIApplicationMain().

A primeira inicialização é o estado inicial do aplicativo, onde é chamado o application willFinishLaunchinWithOptions. Esse método é onde o desenvolvedor tem a chance de executar alguma linha de código.

O recomendado, caso seja necessário executar algum código, é coloca-lo no proximo método, o didFinishLaunchinWithOption.

  • willFinishLaunchinWithOptions: método que informa que algo vai acontecer.
  • didFinishLaunchinWithOption: método que informa que algo aconteceu.

Após a ativação do aplicativo, ele fica em um loop de eventos.

  • Exemplo: Que o usuário faça alguma ação ou que o código faça alguma coisa.

O método applicationDidBecomeActive permite que o aplicativo saiba que ele está prestes a entrar em foreground. Pode ser usado para fazer uma preparação final.

Mudou para o aplicativo

  • Ciclo de vida

O aplicativo entra em estado de background e é “acordado”. O método applicationWillEnterForeground é chamado e depois o aplicativo entra em modo foreground, onde já é possível ser utilizado pelo usuário, e o
applicationDidBecomeActive é chamado.

  • applicationWillEnterForeground = Informa que o aplicativo está saindo de background e entrando em foreground. Fique atento que ele só vai estar ativo quando o método applicationDidBecomeActive for executado.

Mudança para um aplicativo diferente

  • Ciclo de vida

O método applicationWillResignActive informa que o aplicativo está fazendo a transição de foreground para background. Ao entrar no método applicationDidEnterBackground o aplicativo está rodando em background e pode ficar inativo a qualquer momento.

Posteriormente são executadas as validações e o aplicativo entra no estado suspenso, caso ele não possa executar métodos em background.
Se houver um caso de falta de memória, o sistema irá encerrar o aplicativo.

Um método que não foi citado no ciclo de vida e que vale a pena ser comentado é o applicationWillTerminate que informa quando o aplicativo está prestes a terminar.

Ciclo de vida da ViewController

O fluxo pode levar como exemplo o momento em que a View será exibida para o usuário, ela não está visível na tela e será solicitada para aparecer. Se a view não foi apresentada, não foi carregada em memória, o método loadView será responsável por fazer o carregamento da View, logo após é enviado para a controller o método viewDidLoad, o que significa que a View já foi carregada.

  • O viewDidLoad normalmente é chamado somente uma vez e é usado para fazer a configuração inicial.

O método viewWillAppear é o responsável por dizer que a View vai aparecer, sendo chamado antes da ViewController ser adicionada a hierarquia das Views. Ao aparecer é disparado o método viewDidAppear, sendo assim a View já está visível na tela.

Se o aplicativo estiver consumindo muita memória, o sistema irá avisar através do método didReceiveMemoryWarning. O ideal é liberar memória caso isso ocorra para o aplicativo não entrar no estado suspenso.

O método viewWillDisappear é chamado quando a view é removida da hierarquia das Views, quando ela vai sumir da tela (um caso é o usuário está em uma tela e vai para outra tela do aplicativo). Quando essa nova View estiver na tela o método viewDidDisappear é acionado.

Caso o usuário faça um fluxo de acessar uma tela pela primeira vez (viewDidLoad associado) e for para uma segunda tela e voltar novamente para a anterior, nesse caso a view já existia, então o fluxo que passa pelo loadView e viewDidLoad não será acionado, sendo assim o método viewWillAppear será o primeiro a ser chamado.

Conclusão

Entender os dois ciclos de vida irá possibilitar o máximo aproveitamento do que é oferecido, deixando o aplicativo a ser desenvolvido (ou que já esteja em desenvolvimento) melhor, tornando a experiência do usuário bem mais agradável.

Meu nome é Andrew Castro, sou Desenvolvedor iOS e busco sempre aprender e compartilhar conhecimento com todos. Sou da filosofia que você deve fazer tudo por paixão e diversão.

Caso tenha alguma dúvida, é só comentar comentários ou entrar em contato por aqui. Abraço!

A Mobicare combina os Melhores Talentos, Tecnologias de Ponta, Práticas Agile e DevOps com Capacidades Operacionais avançadas para ajudar Operadoras Telecom e grandes empresas a gerarem novas receitas e a melhorarem a experiência dos seus próprios clientes.

Se você gosta de inovar, trabalhar com tecnologia de ponta e está sempre buscando conhecimento, somos um match perfeito!

Faça parte do nosso time. 😉

mobicareofficial

Se você gosta de inovar, trabalhar com tecnologia de ponta e está sempre buscando conhecimento, somos um match perfeito! Vem trabalhar com a gente 😉 bit.ly/mobicarreiras

Andrew Castro

Written by

iOS Developer For Fun

mobicareofficial

Se você gosta de inovar, trabalhar com tecnologia de ponta e está sempre buscando conhecimento, somos um match perfeito! Vem trabalhar com a gente 😉 bit.ly/mobicarreiras

More From Medium

More on Swift from mobicareofficial

More on Swift from mobicareofficial

Desmistificando o Kingfisher

Related reads

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade