Xamarin.Forms Esercitazione sul ciclo di vita dell'app
Prima di provare questa esercitazione è necessario avere completato correttamente:
- Creare la prima Xamarin.Forms guida introduttiva all'app .
- Esercitazione su StackLayout.
- Esercitazione su Entry.
In questa esercitazione apprenderai a:
- Rispondere a un'applicazione in fase di avvio, sospensione o ripristino.
- Rendere permanenti i dati fra le modifiche di stato del ciclo di vita.
Si userà Visual Studio 2019 o Visual Studio per Mac per creare un'applicazione semplice che dimostri come rendere persistenti i dati tra le modifiche dello stato del ciclo di vita. Gli screenshot seguenti illustrano l'applicazione finale:
Rispondere alle modifiche apportate dello stato del ciclo di vita
Per completare questa esercitazione è necessario Visual Studio 2019 (la versione più recente) con installato il carico di lavoro Sviluppo di applicazioni per dispositivi mobili con .NET. È inoltre necessario un Mac associato per compilare l'applicazione dell'esercitazione per iOS. Per informazioni sull'installazione della piattaforma Xamarin, vedere Installazione di Xamarin. Per informazioni sulla connessione di Visual Studio 2019 a un host di compilazione Mac, vedere Associa a Mac per lo sviluppo di Xamarin.iOS.
Avviare Visual Studio e creare una nuova app vuota Xamarin.Forms denominata AppLifecycleTutorial.
Importante
I frammenti di codice C# e XAML in questa esercitazione richiedono che la soluzione sia denominata AppLifecycleTutorial. Se si usa un nome diverso, si verificheranno errori di compilazione quando si copia il codice da questa esercitazione alla soluzione.
Per altre informazioni sulla libreria .NET Standard che viene creata, vedere Anatomia di un'applicazione Xamarin.Forms nell'approfondimento della Xamarin.Forms guida introduttiva.
In Esplora soluzioni, nel progetto AppLifecycleTutorial, espandere App.xaml e fare doppio clic su App.xaml.cs per aprirlo. In App.xaml.cs aggiornare quindi gli override
OnStart
,OnSleep
eOnResume
come indicato di seguito:protected override void OnStart() { Console.WriteLine("OnStart"); } protected override void OnSleep() { Console.WriteLine("OnSleep"); } protected override void OnResume() { Console.WriteLine("OnResume"); }
Questo codice aggiorna gli override dei metodi del ciclo di vita dell'applicazione, con istruzioni
Console.WriteLine
che indicano quando è stato richiamato ogni metodo:- Il metodo
OnStart
viene richiamato all'avvio dell'applicazione. - Il metodo
OnSleep
viene richiamato quando l'applicazione passa in background. - Il metodo
OnResume
viene richiamato alla ripresa dell'applicazione dal background.
Nota
Non è disponibile alcun metodo per la terminazione dell'applicazione. In circostanze normali, la terminazione dell'applicazione verrà eseguita dal metodo
OnSleep
.- Il metodo
Nella barra degli strumenti di Visual Studio premere il pulsante Avvia, ovvero il pulsante a forma di triangolo simile a un pulsante di riproduzione, per avviare l'applicazione all'interno del simulatore iOS remoto o dell'emulatore Android prescelto. All'avvio dell'applicazione viene richiamato il metodo
OnStart
e viene restituito OnStart come output nella finestra Output di Visual Studio:[Mono] Found as 'java_interop_jnienv_get_object_array_element'. OnStart [OpenGLRenderer] HWUI GL Pipeline
Quando l'applicazione passa in background (toccando il pulsante Home in iOS o Android), viene richiamato il metodo
OnSleep
:[EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0) OnSleep [Mono] Image addref System.Runtime.Serialization[0x83ee19c0] -> System.Runtime.Serialization.dll[0x83f57b00]: 2
Alla ripresa dell'applicazione (toccare l'icona dell'applicazione in iOS, toccare il pulsante Panoramica in Android e selezionare l'applicazione AppLifecycleTutorial), viene richiamato il metodo
OnResume
:Thread finished: <Thread Pool> #5 OnResume [EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0)
Nota
Questi blocchi di codice mostrano l'output di esempio quando si esegue l'applicazione in Android.
In Visual Studio arrestare l'applicazione.
Per altre informazioni sul ciclo di vita dell'app Xamarin.Forms , vedere Xamarin.Forms Ciclo di vita dell'app.
Rendere persistenti i dati nelle modifiche di stato del ciclo di vita
La sottoclasse Application
ha un dizionario statico Properties
che può essere usato per archiviare dati fra le modifiche di stato del ciclo di vita. Il dizionario usa una chiave string
e archivia un valore object
. Il dizionario viene salvato automaticamente sul dispositivo e non è ripopolato quando l'applicazione viene riavviata.
Importante
Il dizionario Properties
può serializzare solo i tipi primitivi per l'archiviazione.
In questo esercizio si modificherà l'applicazione in modo da rendere permanente il testo da un elemento Entry
durante l'elaborazione in background e ripristinare il testo nell'elemento Entry
quando l'applicazione viene riavviata.
In Esplora soluzioni, nel progetto AppLifecycleTutorial, espandere App.xaml e fare doppio clic su App.xaml.cs per aprirlo. In App.xaml.cs rimuovere quindi tutto il codice del modello e sostituirlo con il codice seguente:
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"); } } }
Questo codice definisce una proprietà
DisplayText
e una costantedisplayText
. Quando l'applicazione viene messa in background o terminata, l'override del metodoOnSleep
aggiunge il valore della proprietàDisplayText
al dizionarioProperties
, in base alla chiavedisplayText
. Quindi, all'avvio dell'applicazione, a condizione che il dizionarioProperties
contenga la chiavedisplayText
, il valore della chiave viene ripristinato alla proprietàDisplayText
.Importante
Verificare sempre la presenza della chiave nel dizionario
Properties
prima di accedervi, in modo da evitare errori imprevisti.Non è necessario ripristinare i dati dal dizionario
Properties
nell'overload del metodoOnResume
. Questo perché, quando un'applicazione è messa in background, l'applicazione stessa e il suo stato sono ancora in memoria.In Esplora soluzioni, nel progetto AppLifecycleTutorial, fare doppio clic su MainPage.xaml per aprire il file. In MainPage.xaml rimuovere tutto il codice del modello e sostituirlo con il codice seguente:
<?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>
Questo codice definisce in modo dichiarativo l'interfaccia utente per la pagina costituita da un elemento
Entry
in unoStackLayout
. La proprietàEntry.Placeholder
specifica il testo segnaposto mostrato alla prima visualizzazione dell'elementoEntry
e un gestore eventi denominatoOnEntryCompleted
viene registrato con l'eventoCompleted
. Inoltre, perEntry
viene specificato un nome con l'attributox:Name
. Ciò consente al file code-behind di accedere all'oggettoEntry
usando il nome assegnato a esso.In Esplora soluzioni, nel progetto AppLifecycleTutorial, espandere MainPage.xaml e fare doppio clic su MainPage.xaml.cs per aprirlo. In MainPage.xaml.cs aggiungere un override per il metodo
OnAppearing
e il gestore eventiOnEntryCompleted
alla 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; }
Il metodo
OnAppearing
recupera il valore della proprietàApp.DisplayText
e lo imposta come valore della proprietàText
dell'elementoEntry
.Nota
L'override del metodo
OnAppearing
viene eseguito dopo che è stato eseguito il layout dell'elementoContentPage
, ma subito prima che diventi visibile. Pertanto, questo è un buon posto per impostare il contenuto delle Xamarin.Forms visualizzazioni.Quando il testo viene completato nell'elemento
Entry
, con il tasto INVIO, viene eseguito il metodoOnEntryCompleted
e il testoEntry
è archiviato nella proprietàApp.DisplayText
.Nella barra degli strumenti di Visual Studio premere il pulsante Avvia, ovvero il pulsante a forma di triangolo simile a un pulsante di riproduzione, per avviare l'applicazione all'interno del simulatore iOS remoto o dell'emulatore Android prescelto.
Immettere testo nell'elemento
Entry
e premere il tasto INVIO. Quindi mettere l'applicazione in background toccando il pulsante Home per chiamare il metodoOnSleep
.In Visual Studio arrestare l'applicazione e riavviarla di nuovo. Il testo immesso in precedenza nell'elemento
Entry
verrà ripristinato:In Visual Studio arrestare l'applicazione.
Per altre informazioni sulla persistenza dei dati nel dizionario delle proprietà, vedere Dizionario proprietà nella Xamarin.Forms guida alla classe app.
Congratulazioni!
L'esercitazione è stata completata. Si è appreso come:
- Rispondere a un'applicazione in fase di avvio, sospensione o ripristino.
- Rendere permanenti i dati fra le modifiche di stato del ciclo di vita.
Passaggi successivi
Per altre informazioni sulle nozioni di base sulla creazione di applicazioni per dispositivi mobili con Xamarin.Forms, passare all'esercitazione Sul database locale.
Collegamenti correlati
Hai un problema con questa sezione? In caso di problemi, fornisci feedback per contribuire al miglioramento della sezione.