Xamarin.Forms Tutorial do ciclo de vida do aplicativo
Antes de tentar realizar este tutorial, você deve ter concluído com sucesso:
- Crie seu primeiro Xamarin.Forms início rápido de aplicativo .
- Tutorial de StackLayout.
- Tutorial de Entrada.
Neste tutorial, você aprenderá a:
- Responder quando um aplicativo é iniciado, suspenso ou retomado.
- Persistir dados entre alterações de estado do ciclo de vida.
Você usará o Visual Studio 2019 ou Visual Studio para Mac para criar um aplicativo simples que demonstra como persistir dados entre alterações de estado do ciclo de vida. Estas capturas de tela mostram o aplicativo final:
Responder a alterações de estado do ciclo de vida
Para concluir este tutorial, você precisará ter o Visual Studio 2019 (versão mais recente) com a carga de trabalho Desenvolvimento mobile com .NET instalada. Além disso, você precisará de um Mac emparelhado para compilar o aplicativo do tutorial no iOS. Para obter informações sobre como instalar a plataforma Xamarin, confira Instalando o Xamarin. Para obter informações sobre como conectar o Visual Studio 2019 a um host de build Mac, confira Emparelhar com o Mac para desenvolvimento no Xamarin.iOS.
Inicie o Visual Studio e crie um novo aplicativo em branco Xamarin.Forms chamado AppLifecycleTutorial.
Importante
Os snippets de C# e XAML neste tutorial exigem que a solução seja denominada AppLifecycleTutorial. Usar um nome diferente causará erros de build ao copiar o código deste tutorial para a solução.
Para obter mais informações sobre a biblioteca .NET Standard que é criada, consulte Anatomia de um Xamarin.Forms aplicativo no Aprofundamento do Xamarin.Forms Início Rápido.
No Gerenciador de Soluções, no projeto AppLifecycleTutorial, expanda App.xaml e clique duas vezes em App.xaml.cs para abri-lo. Em seguida, em App.xaml.cs, atualize as substituições
OnStart
,OnSleep
eOnResume
da seguinte maneira:protected override void OnStart() { Console.WriteLine("OnStart"); } protected override void OnSleep() { Console.WriteLine("OnSleep"); } protected override void OnResume() { Console.WriteLine("OnResume"); }
Esse código atualiza as substituições de método do ciclo de vida do aplicativo, com instruções
Console.WriteLine
que indicam quando cada método foi invocado:- O método
OnStart
é invocado quando o aplicativo é iniciado. - O método
OnSleep
é invocado quando o aplicativo vai para o segundo plano. - O método
OnResume
é invocado quando o aplicativo é retomado em segundo plano.
Observação
Não há nenhum método de encerramento do aplicativo. Em circunstâncias normais, o encerramento do aplicativo ocorrerá do método
OnSleep
.- O método
Na barra de ferramentas do Visual Studio, pressione o botão Iniciar (o botão triangular que se parece com o botão Reproduzir) para iniciar o aplicativo dentro de seu simulador remoto de iOS ou do Android Emulator escolhido. Quando o aplicativo é iniciado, o método
OnStart
é invocado e OnStart é gerado na janela de Saída do Visual Studio:[Mono] Found as 'java_interop_jnienv_get_object_array_element'. OnStart [OpenGLRenderer] HWUI GL Pipeline
Quando o aplicativo é colocado em segundo plano (tocando no botão Página Inicial no iOS ou Android), o método
OnSleep
é invocado:[EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0) OnSleep [Mono] Image addref System.Runtime.Serialization[0x83ee19c0] -> System.Runtime.Serialization.dll[0x83f57b00]: 2
Em seguida, quando o aplicativo é retomado em segundo plano (toque no ícone do aplicativo no iOS, toque no botão de Visão geral no Android e selecione o aplicativo AppLifecycleTutorial), o método
OnResume
é invocado:Thread finished: <Thread Pool> #5 OnResume [EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0)
Observação
Esses blocos de código mostram a saída de exemplo ao executar o aplicativo no Android.
Interrompa o aplicativo no Visual Studio.
Para obter mais informações sobre o ciclo de vida do aplicativo, consulte Xamarin.Forms Ciclo de vida do Xamarin.Forms aplicativo.
Persistir dados entre alterações de estado do ciclo de vida
A subclasse Application
tem um dicionário Properties
estático que pode ser usado para armazenar dados entre alterações de estado do ciclo de vida. Esse dicionário usa uma chave string
e armazena um valor de object
. O dicionário é salvo automaticamente no dispositivo e é populado novamente quando o aplicativo é reiniciado.
Importante
O dicionário Properties
pode serializar apenas tipos primitivos para armazenamento.
Neste exercício, você modificará o aplicativo para persistir o texto de um Entry
após ser passado para segundo plano e restaurará o texto no Entry
quando o aplicativo for reiniciado.
No Gerenciador de Soluções, no projeto AppLifecycleTutorial, expanda App.xaml e clique duas vezes em App.xaml.cs para abri-lo. Em seguida, em App.xaml.cs, remova todo o código de modelo e substitua-o pelo código a seguir:
using System; using Xamarin.Forms; namespace AppLifecycleTutorial { public partial class App : Application { const string displayText = "displayText"; public string DisplayText { get; set; } public App() { InitializeComponent(); MainPage = new MainPage(); } protected override void OnStart() { Console.WriteLine("OnStart"); if (Properties.ContainsKey(displayText)) { DisplayText = (string)Properties[displayText]; } } protected override void OnSleep() { Console.WriteLine("OnSleep"); Properties[displayText] = DisplayText; } protected override void OnResume() { Console.WriteLine("OnResume"); } } }
Esse código define uma propriedade
DisplayText
e um constantedisplayText
. Quando o aplicativo é colocado em segundo plano ou encerrado, a substituição do métodoOnSleep
adiciona o valor da propriedadeDisplayText
ao dicionárioProperties
, em relação a uma chave dedisplayText
. Em seguida, quando o aplicativo é iniciado, desde que o dicionárioProperties
contenha a chavedisplayText
, o valor da chave é restaurado na propriedadeDisplayText
.Importante
Sempre verifique no dicionário
Properties
a presença de uma chave antes de acessá-lo, a fim de evitar erros inesperados.Não é necessário restaurar dados do dicionário
Properties
na sobrecarga de métodoOnResume
. Isso ocorre porque, quando um aplicativo é colocado em segundo plano, ele e seu estado ainda estão na memória.No Gerenciador de Soluções, no projeto AppLifecycleTutorial, clique duas vezes em MainPage.xaml para abri-lo. Em seguida, em MainPage.xaml, remova todo o código do modelo e substitua-o pelo código a seguir:
<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="AppLifecycleTutorial.MainPage"> <StackLayout Margin="20,35,20,20"> <Entry x:Name="entry" Placeholder="Enter text here" Completed="OnEntryCompleted" /> </StackLayout> </ContentPage>
Esse código define declarativamente a interface do usuário para a página, que é composta por um
Entry
em umStackLayout
. A propriedadeEntry.Placeholder
especifica o texto de espaço reservado mostrado quando oEntry
é exibido pela primeira vez e um manipulador de eventos denominadoOnEntryCompleted
é registrado com o eventoCompleted
. Além disso, oEntry
tem um nome especificado com o atributox:Name
. Isso permite que o arquivo code-behind acesse o objetoEntry
usando o nome atribuído a ele.No Gerenciador de Soluções, no projeto AppLifecycleTutorial, expanda MainPage.xaml e clique duas vezes em MainPage.xaml.cs para abri-lo. Em seguida, em MainPage.xaml.cs, adicione uma substituição para o método
OnAppearing
e o manipulador de eventosOnEntryCompleted
à classe:protected override void OnAppearing() { base.OnAppearing(); entry.Text = (Application.Current as App).DisplayText; } void OnEntryCompleted(object sender, EventArgs e) { (Application.Current as App).DisplayText = entry.Text; }
O método
OnAppearing
recupera o valor da propriedadeApp.DisplayText
e o define como o valor de propriedadeText
doEntry
.Observação
A substituição do método
OnAppearing
é executada após aContentPage
ser apresentada, mas apenas antes de se tornar visível. Portanto, este é um bom lugar para definir o conteúdo das Xamarin.Forms exibições.Quando o texto é finalizado no
Entry
, com a tecla de retorno, o métodoOnEntryCompleted
é executado e o textoEntry
é armazenado na propriedadeApp.DisplayText
.Na barra de ferramentas do Visual Studio, pressione o botão Iniciar (o botão triangular que se parece com o botão Reproduzir) para iniciar o aplicativo dentro de seu simulador remoto de iOS ou do Android Emulator escolhido.
Digite algum texto no
Entry
e pressione a tecla de retorno. Em seguida, coloque o aplicativo em segundo plano tocando botão Página Inicial para invocar o métodoOnSleep
.Interrompa e reinicie o aplicativo no Visual Studio. Dessa maneira, o texto inserido anteriormente na
Entry
será restaurado:Interrompa o aplicativo no Visual Studio.
Para obter mais informações sobre como manter dados no dicionário de propriedades, consulte Dicionário de propriedades no guia Classe de Xamarin.Forms aplicativo.
Parabéns!
Parabéns por concluir este tutorial, no qual você aprendeu a:
- Responder quando um aplicativo é iniciado, suspenso ou retomado.
- Persistir dados entre alterações de estado do ciclo de vida.
Próximas etapas
Para saber mais sobre os conceitos básicos da criação de aplicativos móveis com Xamarin.Formso , continue no tutorial Banco de dados local.
Links relacionados
Tem algum problema com essa seção? Se tiver, envie seus comentários para que possamos melhorar esta seção.