O X do Xamarin Forms — Ciclo de vida e Eventos

Thiago Bertuzzi
6 min readMay 20, 2021

--

Fala Galera,

Tudo beleza?

Um Assunto que eu achei que tinha sido bem explicado e resolvido ate é o ciclo de vida e quando alguns eventos são em aplicativos Xamarin.Forms .

Hoje temos uma documentação bem legal da Microsoft explicando sobre isso. Porem em algumas lives, grupos de discussão e ate no nosso Discord (Onde temos uma sala exclusiva para Mobile, além de .net, cloud e etc) ,eu percebo que muitos dos problemas que as pessoas tem em seus Apps é de não saber em qual momento efetuar alguma ação, um carregamento de dados e etc.

Sendo assim vou tentar explicar de uma forma simples sobre o Ciclo de Vida, Eventos e ate alguns exemplos exclusivos por plataforma.

Bora?

Warning : O que estou escrevendo aqui é do ciclo de vida do Xamarin.Forms. Outros frameworks ou ate frameworks MVVM podem ter( e terão) outros comportamentos e/ou funcionalidades.

Ciclo de Vida do Xamarin.Forms

Em um funcionamento normal do seu App (Normal quando não da crash, ou é encerrado de outras formas) um aplicativo Xamarin.Forms segue basicamente 3 etapas: OnStart, OnSleep e OnResume.

Essas 3 etapas podem ser acessadas / sobrescritas, dentro do arquivo App.Xaml.cs herdando de Application:

Cada etapa corresponde a algo que aconteceu com seu APP e cada uma você pode utilizar de acordo com sua necessidade.

  • OnStart : É acionado assim que seu App inicia, ou seja aqui você pode efetuar alguma ação assim que o Aplicativo é Aberto.
  • OnSleep : É acionado assim que o App é colocado em Background, ou seja quando o usuário sai dele mas não fecha o mesmo. Algumas ações podem ser adicionadas aqui, como parar de processar algo e etc.
  • OnResume : É acionado assim que o App volta do BackGround, ou seja nesse momento você pode retomar alguma ação , voltar a processar algo e etc.

Você pode utilizar o OnStart , por exemplo, para caso se eu App necessite de conexão ativa verificar se a mesma existe antes de abrir a tela correspondente.

Nesses 3 Métodos existe um que sempre cai na duvida o OnSleep, muita gente acaba pensando que ele serve para deixar diversas tarefas em execução em segundo plano , ou de carregamento ou em execução quando o App é fechado.

Isso é parcialmente incorreto.

Tarefas em segundo plano e Serviços

Legal! Mas e executar uma tarefa com o App fechado , já que o OnSleep não funciona para isso?

Ai que esta:

o iOS tem um conceito chamado Background Tasks porem ele só funciona com o APP em segundo plano, ou seja voltamos a ter que verificar se o APP esta rodando em segundo plano para efetuar essa ação. Então quer dizer que não posso executar nada no iOS com o App Fechado? Sim e não.. hahahha. Existem algumas operações que podem ser executadas em segundo plano com eventos específicos conforme a documentação do Xamarin : Operação em segundo plano no iOS com tarefas .

Certos tipos de Apps como audio, voip e etc podem utilizar outro conceito : Registrando aplicativos Xamarin. iOS para serem executados em segundo plano.

Porem deixar algo agendado para execução com o App fechado… não.

o Android por outro lado possui outro conceito. Podemos sim ter um serviço em execução com nosso App fechado e de uma forma bem simples utilizando o WorkManager. Para o artigo não ficar muito extenso eu vou deixar aqui um repositório meu com toda a explicação e implementação do WorkManager.

Se você precisa executar tarefas em segundo plano com o seu app em execução existem conceitos e ate plug-ins que podem te ajudar .

Para executar funções em segundo plano eu vou deixar aqui dois artigos :

Eventos de navegação de Pagina(Page)

Xamarin Docs Pages

Ate agora vimos eventos que são executados no APP, mas além disso as “Pages” possui eventos específicos que podem ser acionados quando elas aparecem ou desaparecem.

Existem 2 eventos que podem ser utilizados :

  • OnAppearing (PageAppearing): É acionado quando a pagina esta para aparecer na tela.
  • OnDisappearing (PageDisappearing): É acionado quando a pagina ira desaparecer da tela.

O OnAppearing pode ser utilizado sobrescrevendo com algum método de sua ViewModel por exemplo caso você utilize o MVVM. Assim poderia , por exemplo, efetuar o carregamento de alguma informação para ao exibir a pagina o dado estar lá.

Dependendo do seu caso existe também uma outra forma de utilizar o OnAppearing. Sim você pode utilizar um Evento global para isso, imagina que você precisa rastrear ou incluir algum evento sempre que uma pagina aparece.

É bem simples , basta utilizar o Application.Current.PageAppearing no App.xaml.cs :

Pronto agora é possível usar esse evento de forma global, da mesma forma com o PageDisappearing :

Eventos de navegação de Modal

Microsoft Docs Modal

Quando navegamos (push) para um Modal ele “empilha” sua pagina em cima da atual :

Microsoft Docs Modal

E assim que fechamos (pop) o mesmo , essa pagina é desempilhada :

Microsoft Docs Modal

Em ambos os processos de empilhar e desempilhar existem alguns eventos Interessantes :

  • ModalPushing : É acionado quando navegamos para o Modal. Antes do Modal abrir. Pode ser utilizado para carregar ou preparar algo para o dado ser exibido na tela.
  • ModalPushed: É acionado assim que o Modal abre.
  • ModalPopping : É acionado no exato momento que o Modal esta prestes a fechar.
  • ModalPopped : É acionado assim que o Modal desaparece da tela.

Assim como na Page , podemos usar eventos globais para efetuar as ações :

Para fechar quem precisa de uma solução local (que eu precisei uma vez inclusive) para Modal eu achei uma discussão muito bacana no Fórum do Xamarin , onde combinando o conceito de Eventos da Application e os Conceitos OnAppearing e OnDisappearing você pode criar uma pagina base para qualquer uma das situações :

Ai basta em sua ContentPage utilizar essa como base e você terá os Eventos a disposição , inclusive para modais :

Link completo da discussão clique aqui.

Mais uma coisa…

Para fechar (com o perdão do trocadilho) uma coisa que todo mundo pergunta, o botão de retornar (back button) do Android.

Sim é possível interceptar esse evento e ou adicionar uma mensagem ou ate fazer uma chamada de alguma função da sua ViewModel.

E só para o artigo não ficar maior ainda deixei tudo pronto e você pode ver como faz e toda a explicação clicando aqui.

Existem mais outros eventos uteis, conceitos de ciclo de vida do iOS e Android, de navegação como os do Shell por exemplo. Mas isso fica para artigos específicos sobre o eles :)

Caso queira baixar o código utilizado no Exemplo: Clique aqui.

Quer ver outros artigos sobre Xamarin ? Clique aqui.

Espero ter ajudado!

Aquele abraço!

--

--

Thiago Bertuzzi
Thiago Bertuzzi

Written by Thiago Bertuzzi

Microsoft MVP,Gamer, Desenvolvedor e apaixonado por tecnologia!