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 个字…… 本文结束。

  • 相关阅读:
    Android桌面快捷方式的实现
    Java之currenHashMap
    windows 2003 配置邮件服务器 hMailServer+squirrelmail
    bat脚本 cmd 命令
    强制客户端更新Silverlight XAP文件方法汇总(转)
    Silverlight 常用StringFormat格式总结(转)
    Excel 操作 DLL
    silverlight 开发软件列表
    通用错误处理
    use XSD.exe in VS2010 from a xsd file to class
  • 原文地址:https://www.cnblogs.com/tcjiaan/p/5989140.html
Copyright © 2011-2022 走看看