앱 활성화 처리
Application.OnLaunched 메서드를 재정의하여 앱 활성화를 처리하는 방법을 알아봅니다.
참고
데스크톱 앱에서 활성화를 처리하는 방법에 대한 자세한 내용은 패키지된 앱의 활성화 정보 가져오기를 참조하세요. GitHub의 AppLifecycle - 다양한 활성화도 참조하세요.
어떤 이유로든 앱이 활성화되면 시스템은 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();
}
사용자가 종료된 앱으로 전환하면 시스템이 Kind(종류)가 Launch(시작)로 설정되고 PreviousExecutionState가 Terminated(종료됨) 또는 ClosedByUser로 설정된 Activated(활성화됨) 이벤트를 전송합니다. 앱이 저장된 애플리케이션 데이터를 로드하고 표시된 콘텐츠를 새로고침합니다.
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 값이 NotRunning이면 앱이 애플리케이션 데이터를 저장하지 못한 것으로, 앱을 처음으로 시작한 것처럼 다시 시작해야 합니다.
참고
현재 창에 이미 설정된 콘텐츠가 있으면 앱이 초기화를 건너뛸 수 있습니다. LaunchActivatedEventArgs.TileId 속성을 검사하여 앱이 기본 타일에서 시작되었는지 또는 보조 타일에서 시작되었는지 확인할 수 있으며, 해당 정보에 따라 새로운 환경을 표시할지 또는 앱 환경을 다시 시작할지 결정할 수 있습니다.