MSDN Community | Windows UWP Articles

Understanding the UWP App Lifecycle

The Universal Windows Platform (UWP) application lifecycle is a fundamental concept that governs how your app behaves from launch to termination. Understanding this lifecycle is crucial for creating robust, responsive, and efficient applications that behave predictably across different device states.

Core States of a UWP App

A UWP app can exist in several states during its lifetime. The operating system manages these states, and your app needs to respond appropriately to state transitions.

Key Lifecycle Events

UWP apps receive notifications from the system about state changes. You can handle these notifications in your app's code to manage its behavior. The most important events are:

1. Launching

When a user launches your app, the system transitions it from the "Not Running" state to the "Running" state. This is the initial entry point for your application. You'll typically perform setup tasks here, such as initializing UI elements, loading data, and preparing the application context.

You can handle the Activated event in your App.xaml.cs (or equivalent) to respond to app launches and other activation scenarios.


void App_Activated(object sender, Windows.ApplicationModel.Activation.IActivatedEventArgs e)
{
    if (e.Kind == ActivationKind.Launch)
    {
        // Handle app launch logic
        // e.g., navigate to the initial page, load initial data
    }
}
            

2. Suspending

When the user navigates away from your app or switches to another app, the system may put your app into a suspended state to conserve resources. While suspended, your app is not actively running, but it remains in memory. This is a critical opportunity to save your app's current state so it can be restored later.

The Suspending event is the primary handler for this transition.


void App_Suspending(object sender, Windows.ApplicationModel.SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
    try
    {
        // Save application state
        // e.g., save user data, current view state
        var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
        localSettings.Values["CurrentPage"] = Frame.CurrentSourcePageType.FullName;
    }
    finally
    {
        deferral.Complete();
    }
}
            

3. Resuming

When the user returns to your suspended app, the system resumes it. The app transitions back to the "Running" state. You should handle the Resuming event to restore your app's state that was saved during the suspending phase.


void App_Resuming(object sender, object e)
{
    // Restore application state
    // e.g., navigate back to the saved page, reload data
    var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
    if (localSettings.Values.ContainsKey("CurrentPage"))
    {
        var pageName = localSettings.Values["CurrentPage"].ToString();
        // Navigate to the saved page, ensuring it's not already loaded
        // Consider using navigation events or checking Frame.Content
    }
}
            

4. Closing/Terminating

Although UWP apps are designed to be suspended rather than frequently terminated, the system may terminate an app if memory is needed or if the user explicitly closes it. When an app is terminated, all its resources are released, and it must be restarted from scratch upon the next launch. Your app doesn't explicitly handle a "terminate" event; it's a consequence of the system reclaiming resources.

Best Practices for Lifecycle Management

Mastering the UWP app lifecycle is key to creating applications that are not only functional but also provide a delightful and reliable user experience on Windows devices.