Xamarin.Forms Tutoriel sur le cycle de vie des applications
Avant de tenter ce didacticiel, vous devez avoir suivi les guides et didacticiels suivants :
- Créez votre premier Xamarin.Forms démarrage rapide d’application .
- Didacticiel StackLayout.
- Didacticiel Entry.
Dans ce tutoriel, vous allez apprendre à :
- Répondre au démarrage, à la mise en veille ou à la sortie de veille d’une application.
- Conserver les données quelle que soit l’évolution de leur état pendant leur cycle de vie.
Vous allez utiliser Visual Studio 2019 ou Visual Studio pour Mac pour créer une application simple qui montre comment conserver les données à travers les changements d’état du cycle de vie. Les captures d’écran suivantes montrent l’application finale :
Répondre aux changements d’état du cycle de vie
Pour suivre ce didacticiel, vous devez disposer de Visual Studio 2019 (dernière version) sur lequel est installée la charge de travail Développement mobile en .NET. Vous aurez également besoin d’un Mac couplé pour générer l’application du didacticiel sur iOS. Pour plus d’informations sur l’installation de la plateforme Xamarin, consultez Installation de Xamarin. Pour plus d’informations sur la connexion de Visual Studio 2019 à un hôte de build Mac, consultez l’article Appairer avec un Mac pour le développement Xamarin.iOS.
Lancez Visual Studio et créez une application vide Xamarin.Forms nommée AppLifecycleTutorial.
Important
Pour les extraits C# et XAML de ce didacticiel, la solution doit se nommer AppLifecycleTutorial. L’utilisation d’un autre nom entraîne des erreurs de build quand vous copiez le code à partir de ce didacticiel dans la solution.
Pour plus d’informations sur la bibliothèque .NET Standard créée, consultez Anatomie d’une Xamarin.Forms application dans le Xamarin.Forms guide de démarrage rapide Deep Dive.
Dans l’Explorateur de solutions, dans le projet AppLifecycleTutorial, développez MainPage.xaml, puis double-cliquez sur MainPage.xaml.cs pour l’ouvrir. Ensuite, dans App.xaml.cs, mettez à jour les substitutions
OnStart
,OnSleep
etOnResume
comme suit :protected override void OnStart() { Console.WriteLine("OnStart"); } protected override void OnSleep() { Console.WriteLine("OnSleep"); } protected override void OnResume() { Console.WriteLine("OnResume"); }
Ce code met à jour les substitutions de méthodes de cycle de vie des applications, avec des instructions
Console.WriteLine
qui indiquent le moment où chaque méthode a été appelée :- La méthode
OnStart
est appelée au démarrage de l’application. - La méthode
OnSleep
est appelée lorsque l’application passe en arrière-plan. - La méthode
OnResume
est appelée lorsque l’application est relancée depuis l’arrière-plan.
Remarque
Il n’existe aucune méthode pour arrêter l’application. Dans des circonstances normales, l’arrêt de l’application est effectué à partir de la méthode
OnSleep
.- La méthode
Dans la barre d’outils Visual Studio, appuyez sur le bouton Démarrer (le bouton triangulaire qui ressemble à un bouton de lecture) pour lancer l’application à l’intérieur du simulateur iOS distant ou de l’émulateur Android de votre choix. Lorsque l’application démarre, la méthode
OnStart
est appelée, et le résultat OnStart est affiché dans la fenêtre de sortie de Visual Studio :[Mono] Found as 'java_interop_jnienv_get_object_array_element'. OnStart [OpenGLRenderer] HWUI GL Pipeline
Lorsque l’application passe en arrière-plan (en appuyant sur le bouton d’accueil iOS ou Android), la méthode
OnSleep
est appelée :[EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0) OnSleep [Mono] Image addref System.Runtime.Serialization[0x83ee19c0] -> System.Runtime.Serialization.dll[0x83f57b00]: 2
Ensuite, lorsque l’application est relancée depuis l’arrière-plan (en appuyant sur l’icône d’application sur iOS ou en appuyant sur le bouton d’aperçu sur Android, puis en sélectionnant l’application AppLifecycleTutorial), la méthode
OnResume
est appelée :Thread finished: <Thread Pool> #5 OnResume [EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0)
Remarque
Ces blocs de code illustrent un exemple de sortie lors de l’exécution de l’application sur Android.
Dans Visual Studio, arrêtez l’application.
Pour plus d’informations sur le cycle de vie de l’application Xamarin.Forms , consultez Xamarin.Forms Cycle de vie des applications.
Conserver les données quelle que soit l’évolution de leur état pendant leur cycle de vie
La sous-classe Application
dispose d’un dictionnaire statique Properties
qui peut être utilisé pour stocker des données tout au long des changements d’état du cycle de vie. Ce dictionnaire utilise une clé string
et stocke une valeur object
. Le dictionnaire est automatiquement enregistré sur l’appareil et il est rempli à nouveau lorsque l’application est redémarrée.
Important
Le dictionnaire Properties
peut sérialiser uniquement les types primitifs de stockage.
Dans cet exercice, vous modifierez l’application pour conserver le texte d’un élément Entry
lors de la mise en arrière-plan et restaurer le texte vers l’élément Entry
lorsque l’application est redémarrée.
Dans l’Explorateur de solutions, dans le projet AppLifecycleTutorial, développez MainPage.xaml, puis double-cliquez sur MainPage.xaml.cs pour l’ouvrir. Ensuite, dans App.xaml.cs, supprimez tout le code du modèle et remplacez-le par le code suivant :
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"); } } }
Ce code définit une propriété
DisplayText
et une constantedisplayText
. Lorsque l’application est mise en arrière-plan ou arrêtée, la substitution de méthodeOnSleep
ajoute la valeur de propriétéDisplayText
au dictionnaireProperties
, par rapport à une clédisplayText
. Puis, lorsque l’application démarre, si le dictionnaireProperties
contient bien la clédisplayText
, la valeur de la clé est restaurée vers la propriétéDisplayText
.Important
Pour éviter toute erreur inattendue, vérifiez toujours que le dictionnaire
Properties
contient la clé avant d’y accéder.Il n’est pas nécessaire de restaurer les données à partir du dictionnaire
Properties
dans la surcharge de méthodeOnResume
. En effet, lorsqu’une application est mise en arrière-plan, son état est toujours conservé en mémoire.Dans l’Explorateur de solutions, dans le projet AppLifecycleTutorial, double-cliquez sur MainPage.xaml pour l’ouvrir. Puis, dans MainPage.xaml, supprimez tout le code du modèle et remplacez-le par le code suivant :
<?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>
Ce code définit de manière déclarative l’interface utilisateur de la page, qui comprend un élément
Entry
dansStackLayout
. La propriétéEntry.Placeholder
spécifie le texte d’espace réservé affiché lorsque l’élémentEntry
est affiché en premier, et un gestionnaire d’événements nomméOnEntryCompleted
est inscrit auprès de l’événementCompleted
. En outre, l’élémentEntry
dispose d’un nom spécifié avec l’attributx:Name
. Ainsi, le fichier code-behind peut accéder à l’objetEntry
en utilisant le nom qui y est affecté.Dans l’Explorateur de solutions, dans le projet AppLifecycleTutorial, développez MainPage.xaml, puis double-cliquez sur MainPage.xaml.cs pour l’ouvrir. Puis, dans MainPage.xaml.cs, ajoutez une substitution pour la méthode
OnAppearing
, et le gestionnaire d’événementsOnEntryCompleted
à la 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; }
La méthode
OnAppearing
récupère la valeur de la propriétéApp.DisplayText
et la définit comme valeur de propriétéText
de l’élémentEntry
.Remarque
Le remplacement de la méthode
OnAppearing
est exécuté une fois queContentPage
est mis en page, mais juste avant qu’il soit visible. Par conséquent, il s’agit d’un bon emplacement pour définir le contenu des Xamarin.Forms vues.Lorsque le texte est finalisé dans l’élément
Entry
, avec la touche de retour, la méthodeOnEntryCompleted
s’exécute et le texteEntry
est stocké dans la propriétéApp.DisplayText
.Dans la barre d’outils Visual Studio, appuyez sur le bouton Démarrer (le bouton triangulaire qui ressemble à un bouton de lecture) pour lancer l’application à l’intérieur du simulateur iOS distant ou de l’émulateur Android de votre choix.
Entrez du texte dans l’élément
Entry
et appuyez sur la touche de retour. Ensuite, mettez l’application en arrière-plan en appuyant sur le bouton d’accueil pour appeler la méthodeOnSleep
.Dans Visual Studio, arrêtez l’application, puis relancez-la. Le texte qui a été entré précédemment dans l’élément
Entry
sera restauré :Dans Visual Studio, arrêtez l’application.
Pour plus d’informations sur la persistance des données dans le dictionnaire de propriétés, consultez Dictionnaire de propriétés dans le guide de classe Xamarin.Forms d’application.
Félicitations !
Félicitations ! Vous avez terminé ce didacticiel qui vous a expliqué comment effectuer les opérations suivantes :
- Répondre au démarrage, à la mise en veille ou à la sortie de veille d’une application.
- Conserver les données quelle que soit l’évolution de leur état pendant leur cycle de vie.
Étapes suivantes
Pour en savoir plus sur les principes de base de la création d’applications mobiles, Xamarin.Formspassez au didacticiel sur la base de données locale.
Liens connexes
Vous avez un défi avec cette section ? Si c'est le cas, faites-nous part de vos commentaires pour que nous puissions l'améliorer.