【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 個字…… 本文結束。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM