Menangani prelaunch aplikasi

Pelajari cara menangani prelaunch aplikasi dengan mengganti metode OnLaunched , dan memanggil CoreApplication.EnablePrelaunch.

Pengantar

Ketika sumber daya sistem yang tersedia memungkinkan, performa startup aplikasi UWP pada perangkat keluarga perangkat desktop ditingkatkan dengan secara proaktif meluncurkan aplikasi yang paling sering digunakan pengguna di latar belakang. Aplikasi yang telah diluncurkan sebelumnya dimasukkan ke dalam status ditangguhkan tak lama 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. Dalam Windows 10, versi 1511, semua aplikasi Platform Windows Universal (UWP) adalah kandidat untuk diluluskan sebelumnya. Dalam 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 pemeriksaan if (e.PrelaunchActivated == false) dilakukan.

Apakah aplikasi telah dilaunching sebelumnya bergantung pada sumber daya sistem. Jika sistem mengalami tekanan sumber daya, maka aplikasi tidak diluncurkan sebelumnya.

Beberapa jenis aplikasi mungkin perlu mengubah perilaku startup mereka agar berfungsi dengan baik dengan pra-pelacakan. Misalnya, aplikasi yang memutar musik saat dimulai; game yang mengasumsikan bahwa pengguna hadir, dan menampilkan visual yang rumit saat 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 diluaskan 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 saat 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 dipanggil 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-luncur saat berjalan di Windows 10, versi 1511. Di versi 1511, semua aplikasi UWP secara otomatis ikut serta untuk melakukan pra-pelafalan, 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 diluaskan 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 prelaunch dapat dideteksi. Dimulai dengan Windows 1607, edisi Anniversary, game Anda tidak akan diluluskan secara default. Jika Anda ingin permainan Anda memanfaatkan prelaunch, panggil CoreApplication.EnablePrelaunch(true).

Jika game Anda menargetkan versi Windows 10 yang lebih lama, Anda dapat menangani kondisi pra-luapan 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 prelaunch karena aplikasi akan berakhir jika tidak dapat ditangguhkan dengan cepat.
  • Aplikasi tidak boleh memulai pemutaran audio dari Application.OnLaunched saat aplikasi di-prelaunching 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 implikasi privasi, pengalaman pengguna, dan 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 tindakan ini hingga visibilitas berubah peristiwa.
  • Telemetri untuk aplikasi Anda harus membedakan antara aktivasi petak peta normal dan aktivasi pra-luncurkan untuk mempersempit skenario jika terjadi masalah.
  • Jika Anda memiliki Microsoft Visual Studio 2015 Update 1, dan Windows 10, Versi 1511, maka Anda dapat mensimulasikan pra-luncurkan untuk Aplikasi aplikasi Anda di Visual Studio 2015 dengan memilih DebugTarget >Debug> LainDebug Windows Universal App PreLaunch.