Menangani aktivasi aplikasi
Pelajari cara menangani aktivasi aplikasi dengan menimpa metode Application.OnLaunched.
Catatan
Untuk informasi tentang menangani aktivasi di aplikasi desktop, lihat Mendapatkan info aktivasi untuk aplikasi yang dipaketkan. Lihat juga AppLifecycle—aktivasi kaya di GitHub.
Mengambil alih handler peluncuran
Saat aplikasi diaktifkan, karena alasan apa pun, sistem mengirimkan peristiwa CoreApplicationView.Activated. Untuk daftar jenis aktivasi, lihat enumerasi ActivationKind.
Kelas Windows.UI.Xaml.Application menentukan metode yang dapat Anda ambil alih untuk menangani berbagai jenis aktivasi. Beberapa jenis aktivasi memiliki metode tertentu yang dapat Anda ambil alih. Untuk jenis aktivasi lainnya, ambil alih metode OnActivated.
Tentukan kelas untuk aplikasi Anda.
<Application
x:Class="AppName.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
Ambil alih metode OnLaunched. Metode ini dipanggil setiap kali pengguna meluncurkan aplikasi. Parameter LaunchActivatedEventArgs berisi status aplikasi Anda sebelumnya dan argumen aktivasi.
Catatan
Di Windows, meluncurkan aplikasi yang ditangguhkan dari petak peta Mulai atau daftar aplikasi tidak memanggil metode ini.
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();
}
Memulihkan data aplikasi jika aplikasi ditangguhkan lalu dihentikan
Saat pengguna beralih ke aplikasi Anda yang dihentikan, sistem mengirim peristiwa Diaktifkan, dengan Jenis diatur ke Peluncuran dan PreviousExecutionState diatur ke Dihentikan atau ClosedByUser. Aplikasi harus memuat data aplikasi yang disimpan dan menyegarkan konten yang ditampilkan.
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();
}
Jika nilai PreviousExecutionState adalah NotRunning, aplikasi gagal menyimpan data aplikasinya dengan sukses dan aplikasi harus dimulai kembali seolah-olah awalnya diluncurkan.
Keterangan
Catatan
Aplikasi dapat melewati inisialisasi jika sudah ada konten yang diatur pada jendela saat ini. Anda dapat memeriksa properti LaunchActivatedEventArgs.TileId untuk menentukan apakah aplikasi diluncurkan dari petak peta primer atau sekunder dan, berdasarkan informasi tersebut, memutuskan apakah Anda harus menyajikan pengalaman aplikasi yang baru atau dilanjutkan.