首页 > 代码库 > 【Win 10 应用开发】应用预启动

【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 。

 

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

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

技术分享

 

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

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

 

【Win 10 应用开发】应用预启动