Application.OnLaunched メソッドをオーバーライドして、アプリのアクティブ化を処理する方法について説明します。
注
デスクトップ アプリでのアクティブ化の処理については、「パッケージ アプリのアクティブ化情報を取得する」を参照してください。 また、AppLifecycle GitHub の豊富なアクティブ化 も参照してください。
起動ハンドラーをオーバーライドする
何らかの理由でアプリがアクティブ化されると、システムは CoreApplicationView.Activated イベントを送信します。 アクティブ化の種類の一覧については、ActivationKind 列挙型を参照してください。
Windows.UI.Xaml.Application クラスは、さまざまなアクティブ化の種類を処理するためにオーバーライドできるメソッドを定義します。 いくつかのアクティブ化の種類には、オーバーライドできる特定のメソッドがあります。 他のアクティブ化の種類の場合は、OnActivated メソッドをオーバーライドします。
アプリケーションのクラスを定義します。
<Application
x:Class="AppName.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
OnLaunched メソッドをオーバーライドします。 このメソッドは、ユーザーがアプリを起動するたびに呼び出されます。 LaunchActivatedEventArgs パラメーターには、アプリの以前の状態とアクティブ化引数が含まれています。
注
Windows では、中断されたアプリをスタート タイルまたはアプリの一覧から起動しても、このメソッドは呼び出されません。
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();
}
アプリが中断された後に終了した場合にアプリケーション データを復元する
ユーザーが終了したアプリに切り替えると、システムは Activated イベントを送信し、Kind を Launch に設定し、PreviousExecutionState を Terminated または ClosedByUserに設定します。 アプリは、保存されたアプリケーション データを読み込み、表示されるコンテンツを更新する必要があります。
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();
}
PreviousExecutionState の値が
注釈
注
現在のウィンドウに既にコンテンツ セットがある場合、アプリは初期化をスキップできます。 LaunchActivatedEventArgs.TileId プロパティを確認して、アプリがプライマリ タイルまたはセカンダリ タイルから起動されたかどうかを判断し、その情報に基づいて、新しいアプリ エクスペリエンスを表示するか再開するかを決定できます。
重要な API
- Windows.ApplicationModel.Activation の
- Windows.UI.Xaml.Application
関連トピック
- アプリのサスペンドを処理する
- アプリの再開 を処理する
- アプリの一時停止と再開の ガイドライン
- アプリのライフサイクル