Gérer l’activation d’une application
Découvrez comment gérer l’activation d’application en remplaçant la méthode Application.OnLaunched.
Remarque
Pour plus d’informations sur la gestion de l’activation dans une application de bureau, consultez Obtenir des informations d’activation pour les applications empaquetées. Consultez également AppLifecycle : activation enrichie sur GitHub.
Remplacer le gestionnaire de lancement
Lorsqu’une application est activée, pour une raison quelconque, le système envoie l’événement CoreApplicationView.Activated . Pour obtenir la liste des types d’activation, consultez l’énumération ActivationKind .
La classe Windows.UI.Xaml.Application définit des méthodes que vous pouvez remplacer pour gérer les différents types d’activation. Plusieurs types d’activation ont une méthode spécifique que vous pouvez remplacer. Pour les autres types d’activation, remplacez la méthode OnActivated.
Définissez la classe pour votre application.
<Application
x:Class="AppName.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
Remplacez la méthode OnLaunched. Cette méthode est appelée chaque fois que l’utilisateur lance l’application. Le paramètre LaunchActivatedEventArgs contient l’état précédent de votre application et les arguments d’activation.
Remarque
Sur Windows, le lancement d’une application suspendue à partir de la vignette Démarrer ou de la liste des applications n’appelle pas cette méthode.
using System;
using Windows.ApplicationModel.Activation;
using Windows.UI.Xaml;
namespace AppName
{
public partial class App
{
async protected override void OnLaunched(LaunchActivatedEventArgs args)
{
EnsurePageCreatedAndActivate();
}
// Creates the MainPage if it isn't already created. Also activates
// the window so it takes foreground and input focus.
private MainPage EnsurePageCreatedAndActivate()
{
if (Window.Current.Content == null)
{
Window.Current.Content = new MainPage();
}
Window.Current.Activate();
return Window.Current.Content as MainPage;
}
}
}
Class App
Protected Overrides Sub OnLaunched(args As LaunchActivatedEventArgs)
Window.Current.Content = New MainPage()
Window.Current.Activate()
End Sub
End Class
...
#include "MainPage.h"
#include "winrt/Windows.ApplicationModel.Activation.h"
#include "winrt/Windows.UI.Xaml.h"
#include "winrt/Windows.UI.Xaml.Controls.h"
...
using namespace winrt;
using namespace Windows::ApplicationModel::Activation;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Controls;
struct App : AppT<App>
{
App();
/// <summary>
/// Invoked when the application is launched normally by the end user. Other entry points
/// will be used such as when the application is launched to open a specific file.
/// </summary>
/// <param name="e">Details about the launch request and process.</param>
void OnLaunched(LaunchActivatedEventArgs const& e)
{
Frame rootFrame{ nullptr };
auto content = Window::Current().Content();
if (content)
{
rootFrame = content.try_as<Frame>();
}
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == nullptr)
{
// Create a Frame to act as the navigation context and associate it with
// a SuspensionManager key
rootFrame = Frame();
rootFrame.NavigationFailed({ this, &App::OnNavigationFailed });
if (e.PreviousExecutionState() == ApplicationExecutionState::Terminated)
{
// Restore the saved session state only when appropriate, scheduling the
// final launch steps after the restore is complete
}
if (e.PrelaunchActivated() == false)
{
if (rootFrame.Content() == nullptr)
{
// When the navigation stack isn't restored navigate to the first page,
// configuring the new page by passing required information as a navigation
// parameter
rootFrame.Navigate(xaml_typename<BlankApp1::MainPage>(), box_value(e.Arguments()));
}
// Place the frame in the current Window
Window::Current().Content(rootFrame);
// Ensure the current window is active
Window::Current().Activate();
}
}
else
{
if (e.PrelaunchActivated() == false)
{
if (rootFrame.Content() == nullptr)
{
// When the navigation stack isn't restored navigate to the first page,
// configuring the new page by passing required information as a navigation
// parameter
rootFrame.Navigate(xaml_typename<BlankApp1::MainPage>(), box_value(e.Arguments()));
}
// Ensure the current window is active
Window::Current().Activate();
}
}
}
};
using namespace Windows::ApplicationModel::Activation;
using namespace Windows::Foundation;
using namespace Windows::UI::Xaml;
using namespace AppName;
void App::OnLaunched(LaunchActivatedEventArgs^ args)
{
EnsurePageCreatedAndActivate();
}
// Creates the MainPage if it isn't already created. Also activates
// the window so it takes foreground and input focus.
void App::EnsurePageCreatedAndActivate()
{
if (_mainPage == nullptr)
{
// Save the MainPage for use if we get activated later
_mainPage = ref new MainPage();
}
Window::Current->Content = _mainPage;
Window::Current->Activate();
}
Restaurer les données d’application si l’application a été suspendue, puis arrêtée
Lorsque l’utilisateur bascule vers votre application terminée, le système envoie l’événement Activé, avec Kind défini sur Launch et PreviousExecutionState défini sur Terminated ou ClosedByUser. L’application doit charger ses données d’application enregistrées et actualiser son contenu affiché.
async protected override void OnLaunched(LaunchActivatedEventArgs args)
{
if (args.PreviousExecutionState == ApplicationExecutionState.Terminated ||
args.PreviousExecutionState == ApplicationExecutionState.ClosedByUser)
{
// TODO: Populate the UI with the previously saved application data
}
else
{
// TODO: Populate the UI with defaults
}
EnsurePageCreatedAndActivate();
}
Protected Overrides Sub OnLaunched(args As Windows.ApplicationModel.Activation.LaunchActivatedEventArgs)
Dim restoreState As Boolean = False
Select Case args.PreviousExecutionState
Case ApplicationExecutionState.Terminated
' TODO: Populate the UI with the previously saved application data
restoreState = True
Case ApplicationExecutionState.ClosedByUser
' TODO: Populate the UI with the previously saved application data
restoreState = True
Case Else
' TODO: Populate the UI with defaults
End Select
Window.Current.Content = New MainPage(restoreState)
Window.Current.Activate()
End Sub
void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs const& e)
{
if (e.PreviousExecutionState() == ApplicationExecutionState::Terminated ||
e.PreviousExecutionState() == ApplicationExecutionState::ClosedByUser)
{
// Populate the UI with the previously saved application data.
}
else
{
// Populate the UI with defaults.
}
...
}
void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ args)
{
if (args->PreviousExecutionState == ApplicationExecutionState::Terminated ||
args->PreviousExecutionState == ApplicationExecutionState::ClosedByUser)
{
// TODO: Populate the UI with the previously saved application data
}
else
{
// TODO: Populate the UI with defaults
}
EnsurePageCreatedAndActivate();
}
Si la valeur de PreviousExecutionState est NotRunning, l’application n’a pas pu enregistrer ses données d’application correctement et l’application doit recommencer comme si elle était initialement lancée.
Notes
Remarque
Les applications peuvent ignorer l’initialisation s’il existe déjà du contenu défini sur la fenêtre active. Vous pouvez vérifier la propriété LaunchActivatedEventArgs.TileId pour déterminer si l’application a été lancée à partir d’une vignette primaire ou secondaire et, en fonction de ces informations, déterminez si vous devez présenter une expérience d’application fraîche ou reprise.