27 avril 2024
UWP

Restituer la navigation après une terminaison

Lorsque l’utilisateur va basculer d’une application à une autre, l’application passe donc en arrière plan et passe dans un état d’attente et le système peut décider de la terminer si la mémoire du Device se réduit. Avant ça, si l’utilisateur revient sur votre application, il doit revenir sur la bonne page et s’il avait saisi des données faire qu’elle y soit toujours. Si vous ne prévoyez pas ce scénario, l’application revient à son état initiale et ça aura pour but de faire bouillir votre utilisateur. Pour garantir une bonne expérience à l’utilisateur, il va être necessaire d’ajouter quelques bout de code pour gérer ce cycle de vie.

Quel code ajouter à votre appli :

Revenir sur la même page

Mémorisation dans l’event OnSuspending

On va ici mémoriser la page qui était affichée. Entre le deferral qui permet d’indiquer au système que vous utilisez par exemple du code async et que vous avez besoin d’un peu de temps pour finaliser (environ 5 secondes max)

private void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
   
    //Mémo de la page actuelle
    Frame frame = Windows.Current.Content as Frame;
    ApplicationData.Current.LocalSettings.Values["NavigationState"] = frame.GetNavigationState();

    deferral.Complete();
}

Retour sur la page dans l’event Onlaunched

On insérera ces lignes dans l’évènement OnLaunched de l’App.xaml.cs

protected override void OnLaunched(LaunchActivatedEventArgs e)
{    
    //.....
    if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
    {
        //Si y'a une page de mémorisée
        if (ApplicationData.Current.LocalSettings.Values.ContainsKey("NavigationState"))
        {
            rootFrame.SetNavigationState((string)ApplicationData.Current.LocalSettings.Values["NavigationState"]);
        }
    }

    // Placez le frame dans la fenêtre active
    Window.Current.Content = rootFrame;
}

Voyons maintenant comment mémoriser les données : Restituer les données après une terminaison

Une réflexion sur « Restituer la navigation après une terminaison »

Laisser un commentaire