Menangani prelaunch aplikasi
Pelajari cara menangani prelaunch aplikasi dengan menimpa metode OnLaunched, dan memanggil CoreApplication.EnablePrelaunch.
Pendahuluan
Saat sumber daya sistem yang tersedia memungkinkan, performa startup aplikasi UWP pada perangkat keluarga perangkat desktop ditingkatkan dengan secara proaktif meluncurkan aplikasi pengguna yang paling sering digunakan di latar belakang. Aplikasi yang telah diluncurkan sebelumnya dimasukkan ke dalam status ditangguhkan segera setelah diluncurkan. Kemudian, ketika pengguna memanggil aplikasi, aplikasi dilanjutkan dengan membawanya dari status ditangguhkan ke status berjalan—yang lebih cepat daripada meluncurkan aplikasi dingin. Pengalaman pengguna adalah bahwa aplikasi hanya diluncurkan dengan sangat cepat.
Sebelum Windows 10, aplikasi tidak secara otomatis memanfaatkan prelaunch. Di Windows 10, versi 1511, semua aplikasi Platform Windows Universal (UWP) adalah kandidat untuk diluluskan sebelumnya. Di Windows 10, versi 1607, Anda harus memilih untuk melakukan pra-pelacakan perilaku dengan memanggil CoreApplication.EnablePrelaunch, dan melewati true
. Tempat yang baik untuk melakukan panggilan ini berada dalam OnLaunched, dekat lokasi yang if (e.PrelaunchActivated == false)
dilakukan pemeriksaan.
Apakah aplikasi telah dilacak sebelumnya tergantung pada sumber daya sistem. Jika sistem mengalami tekanan sumber daya, aplikasi tidak akan diluncurkan sebelumnya.
Beberapa jenis aplikasi mungkin perlu mengubah perilaku startup mereka agar berfungsi dengan baik dengan pra-pelunasan. Misalnya, aplikasi yang memutar musik saat dimulai; game yang mengasumsikan bahwa pengguna hadir, dan menampilkan visual yang rumit ketika aplikasi dimulai; aplikasi olahpesan yang mengubah visibilitas online pengguna selama pengaktifan—semua ini dapat mengidentifikasi kapan aplikasi diluaskan sebelumnya, dan dapat mengubah perilaku startup mereka seperti yang dijelaskan di bagian di bawah ini.
Templat default untuk Proyek XAML (C#, VB, C++) mengakomodasi prelaunch.
Pralaunch dan siklus hidup aplikasi
Setelah aplikasi dilacak sebelumnya, aplikasi memasuki status ditangguhkan. (lihat Menangani penangguhan aplikasi).
Mendeteksi dan menangani prelaunch
Aplikasi menerima bendera LaunchActivatedEventArgs.PrelaunchActivated selama aktivasi. Gunakan bendera ini untuk menjalankan kode yang seharusnya hanya berjalan ketika pengguna secara eksplisit meluncurkan aplikasi, seperti yang ditunjukkan dalam modifikasi berikut ke Application.OnLaunched.
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
// CoreApplication.EnablePrelaunch was introduced in Windows 10 version 1607
bool canEnablePrelaunch = Windows.Foundation.Metadata.ApiInformation.IsMethodPresent("Windows.ApplicationModel.Core.CoreApplication", "EnablePrelaunch");
// NOTE: Only enable this code if you are targeting a version of Windows 10 prior to version 1607,
// and you want to opt out of prelaunch.
// In Windows 10 version 1511, all UWP apps were candidates for prelaunch.
// Starting in Windows 10 version 1607, the app must opt in to be prelaunched.
//if ( !canEnablePrelaunch && e.PrelaunchActivated == true)
//{
// return;
//}
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null)
{
// Create a Frame to act as the navigation context and navigate to the first page
rootFrame = new Frame();
rootFrame.NavigationFailed += OnNavigationFailed;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: Load state from previously suspended application
}
// Place the frame in the current Window
Window.Current.Content = rootFrame;
}
if (e.PrelaunchActivated == false)
{
// On Windows 10 version 1607 or later, this code signals that this app wants to participate in prelaunch
if (canEnablePrelaunch)
{
TryEnablePrelaunch();
}
// TODO: This is not a prelaunch activation. Perform operations which
// assume that the user explicitly launched the app such as updating
// the online presence of the user on a social network, updating a
// what's new feed, etc.
if (rootFrame.Content == null)
{
// 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(typeof(MainPage), e.Arguments);
}
// Ensure the current window is active
Window.Current.Activate();
}
}
/// <summary>
/// This method should be called only when the caller
/// determines that we're running on a system that
/// supports CoreApplication.EnablePrelaunch.
/// </summary>
private void TryEnablePrelaunch()
{
Windows.ApplicationModel.Core.CoreApplication.EnablePrelaunch(true);
}
Penting
Metode TryEnablePrelaunch dalam contoh kode di atas memanggil CoreApplication.EnablePrelaunch. Dan TryEnablePrelaunch sendiri hanya disebut ketika aplikasi berjalan pada versi Windows yang mendukung CoreApplication.EnablePrelaunch. Secara umum, jika ada keraguan, maka Anda harus menggunakan WINDOWS API hanya setelah menentukan bahwa itu didukung oleh platform tempat kode Anda berjalan. Dan Anda dapat melakukannya dengan kelas ApiInformation , seperti yang ditunjukkan pada contoh kode di atas.
Ada juga kode dalam contoh di atas yang dapat Anda batalkan komentarnya jika aplikasi Anda perlu menolak pra-luncurkan saat berjalan di Windows 10, versi 1511. Di versi 1511, semua aplikasi UWP secara otomatis dipilih untuk diluluskan sebelumnya, yang mungkin tidak sesuai untuk aplikasi Anda.
Menggunakan peristiwa VisibilityChanged
Aplikasi yang diaktifkan sebelumnya tidak terlihat oleh pengguna. Mereka menjadi terlihat ketika pengguna beralih ke mereka. Anda mungkin ingin menunda operasi tertentu hingga jendela utama aplikasi Anda terlihat. Misalnya, jika aplikasi Anda menampilkan daftar item baru dari umpan, Anda dapat memperbarui daftar selama peristiwa VisibilityChanged daripada menggunakan daftar yang dibuat saat aplikasi diluncurkan sebelumnya karena mungkin kedaluarsa pada saat pengguna mengaktifkan aplikasi. Kode berikut menangani peristiwa VisibilityChanged untuk MainPage:
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
Window.Current.VisibilityChanged += WindowVisibilityChangedEventHandler;
}
void WindowVisibilityChangedEventHandler(System.Object sender, Windows.UI.Core.VisibilityChangedEventArgs e)
{
// Perform operations that should take place when the application becomes visible rather than
// when it is prelaunched, such as building a what's new feed
}
}
Panduan permainan DirectX
Game DirectX umumnya tidak boleh mengaktifkan prelaunch karena banyak game DirectX melakukan inisialisasi mereka sebelum pra-pelunasan dapat dideteksi. Dimulai dengan Windows 1607, edisi Anniversary, game Anda tidak akan dilaunching secara default. Jika Anda ingin game Anda memanfaatkan prelaunch, panggil CoreApplication.EnablePrelaunch(true).
Jika game Anda menargetkan versi Windows 10 yang lebih lama, Anda dapat menangani kondisi pra-pelunasan untuk keluar dari aplikasi:
void ViewProvider::OnActivated(CoreApplicationView const& /* appView */, Windows::ApplicationModel::Activation::IActivatedEventArgs const& args)
{
if (args.Kind() == Windows::ApplicationModel::Activation::ActivationKind::Launch)
{
auto launchArgs{ args.as<Windows::ApplicationModel::Activation::LaunchActivatedEventArgs>()};
if (launchArgs.PrelaunchActivated())
{
// Opt-out of Prelaunch.
CoreApplication::Exit();
}
}
}
void ViewProvider::Initialize(CoreApplicationView const & appView)
{
appView.Activated({ this, &App::OnActivated });
}
void ViewProvider::OnActivated(CoreApplicationView^ appView,IActivatedEventArgs^ args)
{
if (args->Kind == ActivationKind::Launch)
{
auto launchArgs = static_cast<LaunchActivatedEventArgs^>(args);
if (launchArgs->PrelaunchActivated)
{
// Opt-out of Prelaunch
CoreApplication::Exit();
return;
}
}
}
Panduan Umum
- Aplikasi tidak boleh melakukan operasi jangka panjang selama pra-proses karena aplikasi akan dihentikan jika tidak dapat ditangguhkan dengan cepat.
- Aplikasi tidak boleh memulai pemutaran audio dari Application.OnLaunched saat aplikasi dilaunching sebelumnya karena aplikasi tidak akan terlihat dan tidak akan terlihat mengapa ada pemutaran audio.
- Aplikasi tidak boleh melakukan operasi apa pun selama peluncuran yang mengasumsikan bahwa aplikasi terlihat oleh pengguna, atau mengasumsikan bahwa aplikasi diluncurkan secara eksplisit oleh pengguna. Karena aplikasi sekarang dapat diluncurkan di latar belakang tanpa tindakan pengguna eksplisit, pengembang harus mempertimbangkan privasi, pengalaman pengguna, dan implikasi performa.
- Contoh pertimbangan privasi adalah ketika aplikasi sosial harus mengubah status pengguna menjadi online. Ini harus menunggu sampai pengguna beralih ke aplikasi alih-alih mengubah status saat aplikasi diluncurkan sebelumnya.
- Contoh pertimbangan pengalaman pengguna adalah bahwa jika Anda memiliki aplikasi, seperti game, yang menampilkan urutan pengantar saat diluncurkan, Anda mungkin menunda urutan pengantar hingga pengguna beralih ke aplikasi.
- Contoh implikasi performa adalah Anda mungkin menunggu hingga pengguna beralih ke aplikasi untuk mengambil informasi cuaca saat ini alih-alih memuatnya saat aplikasi diluncurkan sebelumnya dan kemudian perlu memuatnya lagi ketika aplikasi terlihat untuk memastikan bahwa informasi tersebut terkini.
- Jika aplikasi Anda menghapus Petak Peta Langsung saat diluncurkan, tangguhkan hal ini hingga visibilitas berubah peristiwa.
- Telemetri untuk aplikasi Anda harus membedakan antara aktivasi petak peta normal dan aktivasi pralaunch untuk mempermudah mempersempit skenario jika masalah terjadi.
- Jika Anda memiliki Microsoft Visual Studio 2015 Update 1, dan Windows 10, Versi 1511, maka Anda dapat mensimulasikan pra-luncur untuk Aplikasi Anda di Visual Studio 2015 dengan memilih Debug Target>Debug>Lain Debug Windows Universal App PreLaunch.