预启动是如何工作的?

How prelaunch works?

在寻找可以使我的应用程序启动得更快的功能时,我发现 Microsoft documentation 中的预启动功能可以帮助更快地打开应用程序。但是,即使我注册应用程序以启用预启动,OnLaunched 事件在 e.PrelaunchActivated 中仍会变得错误。 (我只能在调试模式下使用 VS 选项 'Debug UWP Prelaunch' 测试此功能)。

我需要微软证书才能使用吗?
OS 需要多长时间才能了解我的应用符合预启动条件?
这会影响我在活动中做假的事实吗?

就我而言,Windows 在 Visual Studio 部署应用程序时不使用 Prelaunch,但从应用商店安装它后它按预期工作。用户必须至少 运行 一个应用程序,下次您将在任务管理器中看到它。它能否工作取决于可用内存量,但我发现即使在具有 4Gb RAM 的设备上它也能工作。

我进行了测试,预启动工作正常。我将 post 我的代码在这里并解释预启动是如何工作的。希望能帮到你解决问题。

这是我使用的示例代码:

  protected override void OnLaunched(LaunchActivatedEventArgs e)
    {
        bool canEnablePrelaunch = Windows.Foundation.Metadata.ApiInformation.IsMethodPresent("Windows.ApplicationModel.Core.CoreApplication", "EnablePrelaunch");

        // ********
        // some other code here
        // *********

        //check if it is prelaunched
        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();
            }
            // ******
            // normal code
            // ******
        }
        else
        {
            //prelaunched
            // do some logic that don't require UI thread.
            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), "PreLaunched");
            }
            // Ensure the current window is active
            Window.Current.Activate();
        }
    }

如您所见,我添加了一个 else 语句来在应用程序预启动时完成工作。

在Visual Studio中通过Debug Universal Windows App Prelaunch模式测试时,整个过程应该是这样的:

  1. 选择Debug Universal Windows App Prelaunch模式,应用程序将预启动。

  2. OnLaunched 事件将被触发,您将进入 else 语句,因为它是预启动的。

  3. 您可以在 OnLaunched 预发布活动中完成您的工作

  4. 然后应用程序将进入暂停状态。

  5. 现在,用户从“开始”菜单启动应用程序。

  6. OnLaunched事件会再次触发这次会显示e.PrelaunchActivated == false因为是由用户启动,它不是预启动的。我怀疑这是您遇到的行为。

这就是预启动工作的整个过程。这里也提到了这一点:App launch.