zoukankan      html  css  js  c++  java
  • 【Win 10 应用开发】应用预启动

    所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了。在系统资源允许的情况下(比如电池电量充足,有足够的内存空间),系统会把用户常用的应用程序在后台启动,但不会显示用户界面。在预启动时,可以事先初始化一些数据,等到用户正式启动应用时,呈现界面的效率就有所提升。

    预启动的时候,应用程序仍然会调用 OnLaunched 方法的,在 OnLaunched 方法调用之后,会马上发生 Suspending 事件,随后应用就会暂停。

    当用户正式启动应用时,同样也会调用 OnLaunched 方法,那么,如何知道应用程序是正式启动还是预启动呢。OnLaunched 方法的参数有一个 PrelaunchActivated 属性,布尔类型,如果这个属性为真,说明当前调用是预启动;否则就是正式启动。因此,在处理 OnLaunched 方法时,只要判断这个属性就可以了,当它为false时,才去创建用户界面。

    应用项目默认生成的模板代码是这样的:

            protected override void OnLaunched(LaunchActivatedEventArgs e)
            {
                Frame rootFrame = Window.Current.Content as Frame;
    
                // 不要在窗口已包含内容时重复应用程序初始化,
                // 只需确保窗口处于活动状态
                if (rootFrame == null)
                {
                    // 创建要充当导航上下文的框架,并导航到第一页
                    rootFrame = new Frame();
    
                    rootFrame.NavigationFailed += OnNavigationFailed;
    
                    // 将框架放在当前窗口中
                    Window.Current.Content = rootFrame;
                }
    
                if (e.PrelaunchActivated == false)
                {
                    if (rootFrame.Content == null)
                    {
                        // 当导航堆栈尚未还原时,导航到第一页,
                        // 并通过将所需信息作为导航参数传入来配置
                        // 参数
                        rootFrame.Navigate(typeof(MainPage), e.Arguments);
                    }
                    // 确保当前窗口处于活动状态
                    Window.Current.Activate();
                }
            }

     它是先实例化作为UI根的 Frame 对象,然后再判断它是否为预启动,如果不是,就导航到主页面。

    我们可以干脆这样修改:

            protected override void OnLaunched(LaunchActivatedEventArgs e)
            {
                if (!e.PrelaunchActivated)
                {
                    Frame rootVisual = Window.Current.Content as Frame;
                    if (rootVisual == null)
                    {
                        rootVisual = new Frame();
                        Window.Current.Content = rootVisual;
                    }
                    if (rootVisual.Content == null)
                    {
                        rootVisual.Navigate(typeof(MainPage), e.Arguments);
                    }
                    Window.Current.Activate();
                }
            }

    反正不创建UI了,弄个 Frame 在那里也没什么毛用,不如直接等到正式启动时再创建 Frame 。

    补充一下,在e.PrelaunchActivated之前,需要调用以下代码来开启预启动:

    CoreApplication.EnablePrelaunch(true);

    参数是布尔类型,true表示启用预启动,false表示禁用预启动。

    OK,现在大伙儿都知道怎么判断预启动了,那么,我如果要调试预启动,该做啥。要对预启动进行调试,不要直接运行调试,因为直接运行是进入正式启动方式,而不是预启动。

    正确的操作是:依次执行菜单【调试】-【调试其他目标】-【调试通用 Windows 应用预启动】,然后就会执行 OnLaunched 方法,而 PrelaunchActivated 属性就能返回 true。

     在调试的时候,应用不会引发 Suspending 事件,你可以通过【调试位置】工具栏控制应用进入 Suspend 状态。

    好了,本文内容实在太简单了,为了节约时间,此处省略 310 个字…… 本文结束。

  • 相关阅读:
    直播实录: 零售金融线上风控的规划与实践
    暖春行动护航"多投票平台”,助力数字经济发展
    顶象助力伍拾度,打造公正公平投票平台
    “2019人工智能案例TOP100”榜发布,顶象与众邦银行均入选
    风控四件套全年免费活动发布一周后,7个与你相关的问题
    WPF自学入门(八)WPF窗体之间的交互
    WPF自学入门(七)WPF 初识Binding
    WPF自学入门(六)WPF带标题的内容控件简单介绍
    WPF自学入门(五)WPF依赖属性
    WPF自学入门(四)WPF路由事件之自定义路由事件
  • 原文地址:https://www.cnblogs.com/tcjiaan/p/5989140.html
Copyright © 2011-2022 走看看