国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Windows Phone 8.1 應用生命周期

移動開發(fā)
在 8.0 時代,不斷的按下“后退鍵”就可以完全的關閉并且終止應用,但在 8.1 中,這樣的行為只會讓應用處在 Suspended(掛起)狀態(tài),可以通過長按“后退鍵”進入多任務界面查看。 那如果還想像 8.0 一樣終止應用呢?(雖然不推薦也沒有必要)可以在多任務界面點擊應用右上角的“叉叉”或者向下滑。

一、“后退鍵”不會終止應用

關于 Windows Phone 8.1 的應用生命周期,***個要知道的關鍵就是:“后退鍵”不會終止應用!

在 8.0 時代,不斷的按下“后退鍵”就可以完全的關閉并且終止應用,但在 8.1 中,這樣的行為只會讓應用處在 Suspended(掛起)狀態(tài),可以通過長按“后退鍵”進入多任務界面查看。

那如果還想像 8.0 一樣終止應用呢?(雖然不推薦也沒有必要)可以在多任務界面點擊應用右上角的“叉叉”或者向下滑。

 

二、應用生命周期

應用的三個狀態(tài)分別是:

A:NotRunning

也就是還沒開啟過應用,在多任務界面沒有該應用時。

B:Running

在屏幕上顯示的應用就是 Running 狀態(tài),同時只會有 1 個應用處于 Running 狀態(tài)。

C:Suspended

不在屏幕上顯示并能在多任務界面查看的應用則處于 Suspended(掛起)狀態(tài)。

 

三種狀態(tài)間切換的操作:

(1)NotRunning -> Running

要從 NotRunning 切換到 Running 狀態(tài),其實也就是開啟應用,可通過點擊應用磁貼、應用間協議啟動、Cortana等方式。

在狀態(tài)的切換過程中會觸發(fā) OnLaunched 事件。

(2)Running -> Suspended

當應用不再占據屏幕時則從 Running 切換到 Suspended 狀態(tài),可以是“Win”鍵、“返回鍵”,有電話打來時也會掛起。

在狀態(tài)的切換過程中會觸發(fā) OnSuspending 事件。

(3)Suspended -> Running

如果在應用掛起狀態(tài)時沒有因為某些原因(比如內存不足)導致應用終止的話,點擊磁貼或者多任務切換都會讓應用從 Suspender 返回到 Running 狀態(tài)。

在狀態(tài)的切換過程中會依次觸發(fā) OnResuming 和 OnLaunched 事件。

(4)Suspended -> NotRunning

如果在應用掛起狀態(tài)時因為某些原因(比如內存不足)導致應用終止的話,則會從 Suspended 變成 NotRunning 狀態(tài)。

在這過程不會觸發(fā)任何事件。

 #p#

三、OnSuspending

因為應用在掛起狀態(tài)時,并不能預測應用是否會因為某些原因(比如內存不足)而終止,而在這終止過程中也沒有事件讓開發(fā)者處理應用數據,所以只能在應用將要掛起時準備。因此 OnSuspending 事件變得十分重要。

若要使用 OnSuspending 方法則先要在構造函數中添加對其的引用:

  1. public App() 
  2.   this.InitializeComponent(); 
  3.   this.Suspending += OnSuspending; 
而在 OnSuspending 方法中可以根據需要保存頁面數據,比如輸入框內的文本、頁面導航歷史等,可以通過保存在應用獨立存儲中或利用 NavigationHelper 和 SuspensionManager 類等:
  1. async void OnSuspending(object sender, SuspendingEventArgs e) 
  2.     SuspendingDeferral deferral = e.SuspendingOperation.GetDeferral(); 
  3.  
  4.     await this.SaveStateToLocalFile(Data.Value); 
  5.  
  6. await SuspensionManager.SaveAsync(); 
  7.  deferral.Complete();

如果只想保存某個頁面的信息則可以在 SaveState 中保存

  1. private void NavigationHelper_SaveState(object sender, SaveStateEventArgs e) 
  2.      e.PageState["isEditing"] = true
  3.      e.PageState["currentText"] = this.viewModel.DataItem.Title; 

NavigationHelper 和 SuspensionManager 類是添加基本頁時 Visual Studio 自動添加的

  1. public class NavigationHelper : DependencyObject 
  2.     private Page Page { get; set; } 
  3.     private Frame Frame { get { return this.Page.Frame; } } 
  4.  
  5.     public NavigationHelper(Page page) 
  6.     { 
  7.         this.Page = page; 
  8.  
  9.         this.Page.Loaded += (sender, e) => 
  10.         { 
  11. WINDOWS_PHONE_APP 
  12.             Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed; 
  13.  
  14. if 
  15.         }; 
  16.  
  17.         this.Page.Unloaded += (sender, e) => 
  18.         { 
  19. WINDOWS_PHONE_APP 
  20.             Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed; 
  21.  
  22. if 
  23.         }; 
  24.     } 
  25.  
  26.     #region Navigation support 
  27.  
  28.         RelayCommand _goBackCommand; 
  29.         RelayCommand _goForwardCommand; 
  30.  
  31.         public RelayCommand GoBackCommand 
  32.         { 
  33.             get 
  34.             { 
  35.                 if (_goBackCommand == null
  36.                 { 
  37.                     _goBackCommand = new RelayCommand( 
  38.                         () => this.GoBack(), 
  39.                         () => this.CanGoBack()); 
  40.                 } 
  41.                 return _goBackCommand; 
  42.             } 
  43.             set 
  44.             { 
  45.                 _goBackCommand = value; 
  46.             } 
  47.         } 
  48.  
  49.         public RelayCommand GoForwardCommand 
  50.         { 
  51.             get 
  52.             { 
  53.                 if (_goForwardCommand == null
  54.                 { 
  55.                     _goForwardCommand = new RelayCommand( 
  56.                         () => this.GoForward(), 
  57.                         () => this.CanGoForward()); 
  58.                 } 
  59.                 return _goForwardCommand; 
  60.             } 
  61.         } 
  62.  
  63.         public virtual bool CanGoBack() 
  64.         { 
  65.             return this.Frame != null && this.Frame.CanGoBack; 
  66.         } 
  67.  
  68.         public virtual bool CanGoForward() 
  69.         { 
  70.             return this.Frame != null && this.Frame.CanGoForward; 
  71.         } 
  72.  
  73.         public virtual void GoBack() 
  74.         { 
  75.             if (this.Frame != null && this.Frame.CanGoBack) this.Frame.GoBack(); 
  76.         } 
  77.  
  78.         public virtual void GoForward() 
  79.         { 
  80.             if (this.Frame != null && this.Frame.CanGoForward) this.Frame.GoForward(); 
  81.         } 
  82.  
  83. #if WINDOWS_PHONE_APP 
  84.         private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) 
  85.         { 
  86.             if (this.GoBackCommand.CanExecute(null)) 
  87.             { 
  88.                 e.Handled = true
  89.                 this.GoBackCommand.Execute(null); 
  90.             } 
  91.         } 
  92. #else 
  93.         private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, 
  94.             AcceleratorKeyEventArgs e) 
  95.         { 
  96.             var virtualKey = e.VirtualKey; 
  97.  
  98.             if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || 
  99.                 e.EventType == CoreAcceleratorKeyEventType.KeyDown) && 
  100.                 (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || 
  101.                 (int)virtualKey == 166 || (int)virtualKey == 167)) 
  102.             { 
  103.                 var coreWindow = Window.Current.CoreWindow; 
  104.                 var downState = CoreVirtualKeyStates.Down; 
  105.                 bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; 
  106.                 bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; 
  107.                 bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; 
  108.                 bool noModifiers = !menuKey && !controlKey && !shiftKey; 
  109.                 bool onlyAlt = menuKey && !controlKey && !shiftKey; 
  110.  
  111.                 if (((int)virtualKey == 166 && noModifiers) || 
  112.                     (virtualKey == VirtualKey.Left && onlyAlt)) 
  113.                 { 
  114.                     e.Handled = true
  115.                     this.GoBackCommand.Execute(null); 
  116.                 } 
  117.                 else if (((int)virtualKey == 167 && noModifiers) || 
  118.                     (virtualKey == VirtualKey.Right && onlyAlt)) 
  119.                 { 
  120.                     e.Handled = true
  121.                     this.GoForwardCommand.Execute(null); 
  122.                 } 
  123.             } 
  124.         } 
  125.  
  126.         private void CoreWindow_PointerPressed(CoreWindow sender, 
  127.             PointerEventArgs e) 
  128.         { 
  129.             var properties = e.CurrentPoint.Properties; 
  130.  
  131.             if (properties.IsLeftButtonPressed || properties.IsRightButtonPressed || 
  132.                 properties.IsMiddleButtonPressed) return
  133.  
  134.             bool backPressed = properties.IsXButton1Pressed; 
  135.             bool forwardPressed = properties.IsXButton2Pressed; 
  136.             if (backPressed ^ forwardPressed) 
  137.             { 
  138.                 e.Handled = true
  139.                 if (backPressed) this.GoBackCommand.Execute(null); 
  140.                 if (forwardPressed) this.GoForwardCommand.Execute(null); 
  141.             } 
  142.         } 
  143. #endif 
  144.  
  145.         #endregion 
  146.  
  147.     #region Process lifetime management 
  148.  
  149.         private String _pageKey; 
  150.         public event LoadStateEventHandler LoadState; 
  151.         public event SaveStateEventHandler SaveState; 
  152.  
  153.         public void OnNavigatedTo(NavigationEventArgs e) 
  154.         { 
  155.             var frameState = SuspensionManager.SessionStateForFrame(this.Frame); 
  156.             this._pageKey = "Page-" + this.Frame.BackStackDepth; 
  157.  
  158.             if (e.NavigationMode == NavigationMode.New) 
  159.             { 
  160.                 var nextPageKey = this._pageKey; 
  161.                 int nextPageIndex = this.Frame.BackStackDepth; 
  162.                 while (frameState.Remove(nextPageKey)) 
  163.                 { 
  164.                     nextPageIndex++; 
  165.                     nextPageKey = "Page-" + nextPageIndex; 
  166.                 } 
  167.  
  168.                 if (this.LoadState != null
  169.                 { 
  170.                     this.LoadState(thisnew LoadStateEventArgs(e.Parameter, null)); 
  171.                 } 
  172.             } 
  173.             else 
  174.             { 
  175.                 if (this.LoadState != null
  176.                 { 
  177.                     this.LoadState(thisnew LoadStateEventArgs(e.Parameter, (Dictionary<String, Object>)frameState[this._pageKey])); 
  178.                 } 
  179.             } 
  180.         } 
  181.  
  182.         public void OnNavigatedFrom(NavigationEventArgs e) 
  183.         { 
  184.             var frameState = SuspensionManager.SessionStateForFrame(this.Frame); 
  185.             var pageState = new Dictionary<String, Object>(); 
  186.             if (this.SaveState != null
  187.             { 
  188.                 this.SaveState(thisnew SaveStateEventArgs(pageState)); 
  189.             } 
  190.             frameState[_pageKey] = pageState; 
  191.         } 
  192.  
  193.         #endregion 
  194.  
  195.  
  196. public delegate void LoadStateEventHandler(object sender, LoadStateEventArgs e); 
  197. public delegate void SaveStateEventHandler(object sender, SaveStateEventArgs e); 
  198.  
  199. public class LoadStateEventArgs : EventArgs 
  200.     public Object NavigationParameter { get; private set; } 
  201.     public Dictionary<string, Object> PageState { get; private set; } 
  202.  
  203.     public LoadStateEventArgs(Object navigationParameter, Dictionary<string, Object> pageState) 
  204.         : base() 
  205.     { 
  206.         this.NavigationParameter = navigationParameter; 
  207.         this.PageState = pageState; 
  208.     } 
  209.  
  210. public class SaveStateEventArgs : EventArgs 
  211.     public Dictionary<string, Object> PageState { get; private set; } 
  212.     public SaveStateEventArgs(Dictionary<string, Object> pageState) 
  213.         : base() 
  214.     { 
  215.         this.PageState = pageState; 
  216.     } 
#p#

四、OnResuming

既然在 OnSuspending 和 SaveState 方法中保存了必要數據,就可以在 OnResuming 和 LoadState 方法中獲取之前保存的數據

  1. void OnResuming(object sender, object e) 
  2.     Data.Value += this.CalculateOffsetTimeInDecimalSeconds(this.suspensionTime); 
  1. private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e) 
  2.     if ((e.PageState != null) && e.PageState.ContainsKey("isEditing")) 
  3.     { 
  4.         this.viewModel.SetEditMode(); 
  5.         this.viewModel.DataItem.Title = e.PageState["currentText"] as string; 
  6.     } 

五、OnLaunched

首先,在 OnLaunched 方法中可以通過 e.PreviousExecutionState 了解到應用之前的狀態(tài)。

狀態(tài)包括:

(1)CloseByUser:被用戶主動在多任務界面中關閉

(2)NotRunning:沒有啟動過

(3)Running:啟動中

(4)Terminated:掛起狀態(tài)時因內存不足被系統(tǒng)終止

(5)Suspended:掛起狀態(tài)

因此,可以通過對此的判斷,根據不同情況處理應用:

  1. protected async override void OnLaunched(LaunchActivatedEventArgs e) 
  2.   Frame rootFrame = Window.Current.Content as Frame; 
  3.  
  4.   if (rootFrame == null
  5.   { 
  6.     rootFrame = new Frame(); 
  7.  
  8.     SuspensionManager.RegisterFrame(rootFrame, "AppFrame"); 
  9.  
  10.     rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0]; 
  11.  
  12.     if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) 
  13.     { 
  14.       try 
  15.       { 
  16.         await SuspensionManager.RestoreAsync(); 
  17.       } 
  18.       catch (SuspensionManagerException) 
  19.       { 
  20.       } 
  21.     } 
  22.  
  23.     Window.Current.Content = rootFrame; 
  24.   } 
  25.  
  26.   if (rootFrame.Content == null
  27.   { 
  28.     rootFrame.Navigate(typeof(MainPage), e.Arguments); 
  29.   } 
  30.  
  31.   Window.Current.Activate(); 

六、注意

以上的方法盡量使用異步操作,不要進行大量的復雜操作

 本文鏈接:http://www.cnblogs.com/xiaoshi3003/p/3752895.html

責任編輯:chenqingxiang 來源: cnblogs
相關推薦

2013-07-31 14:50:32

Windows PhoWP應用程序生命周期

2013-08-01 09:40:51

Windows 8.1

2012-05-28 15:37:20

WP程序生命周期

2012-06-20 10:29:16

敏捷開發(fā)

2013-12-13 09:47:23

2015-07-09 15:42:48

ios應用生命周期

2011-07-20 15:58:58

iPhone 應用程序 生命周期

2009-06-24 10:34:39

JSF生命周期JSF應用程序

2015-07-08 16:28:23

weak生命周期

2023-04-19 07:50:59

?云原生生命周期管理

2011-08-10 16:50:10

iPhone生命周期

2014-07-11 11:09:10

App應用程序生命周期

2013-09-26 11:20:34

Informatica

2012-12-04 10:02:03

2022-04-19 07:20:24

軟件開發(fā)安全生命周期SSDLC應用安全

2009-06-24 10:47:55

JSF生命周期

2013-08-19 17:03:00

.Net生命周期對象

2021-07-19 05:52:29

網絡生命周期網絡框架

2010-07-14 10:48:37

Perl線程

2009-06-11 11:28:35

JSF生命周期
點贊
收藏

51CTO技術棧公眾號

色一情一乱一伦一区二区三区丨| 亚洲人成网站精品片在线观看| 国产一级做a爰片久久| 欧美日韩高清一区二区不卡| 亚洲国产欧美日韩在线观看第一区| 日韩视频免费播放| 日韩小视频在线观看专区| 欧美一区二区三区不卡| 成人国产精品免费观看| 操人视频在线观看欧美| 久久99日本精品| 羞羞网站在线看| 99久久国产免费看| 日韩av一区二| 亚洲激情 国产| 97久久夜色精品国产| 亚洲综合欧美在线| 日韩一区二区福利| www.在线欧美| 国产资源一区| 草b视频在线观看| 亚洲毛片一区二区| 激情深爱一区二区| 欧美日韩美女| 国产玉足脚交久久欧美| 亚洲香蕉伊综合在人在线视看| 精品一区二区免费视频| 91成人福利在线观看| 精品电影在线| 亚洲综合欧美在线| 在线观看欧美一区| 欧美国产中文字幕| 欧美电影在线免费观看| 99re66热这里只有精品3直播| 激情丁香综合五月| 亚洲xxx拳头交| 日韩美女在线| 韩日一区二区| 九色福利视频| 免费人成短视频在线观看网站| 精品国产中文字幕| 91精品国产色综合| 国产精品日日摸夜夜添夜夜av| 一区二区亚洲欧洲国产日韩| 国产精品免费久久| www.久久99| а√在线中文网新版地址在线| 国产在线无码精品| 成人美女av在线直播| 97视频在线观看成人| 国产精品久久久久av| 久久一本综合频道| 激情黄产视频在线免费观看| 欧美另类videosbestsex日本| 日韩在线不卡视频| 日韩毛片在线免费观看| 天天av综合| 色爱综合区网| 鲁一鲁一鲁一鲁一澡| 欧美亚洲另类在线| 欧美日韩中字一区| 狠狠狠色丁香婷婷综合久久五月| 狂野欧美性猛交xxxx| 国产一二区视频| 国产精品国产精品国产专区蜜臀ah| 亚洲第一黄色网| 欧美国产日韩精品免费观看| 国产精品成人a在线观看| 牛牛电影国产一区二区| www.欧美日本| 成人18视频| 日韩在线视频线视频免费网站| 亚洲制服丝袜一区| 老司机一区二区| 日韩伦理一区二区三区| 色视频在线免费观看| 国产素人在线观看| 国产专区精品视频| 亚洲少妇激情视频| 欧美日韩精品在线播放| 国产麻豆视频一区| 91精品国产自产拍在线观看蜜| 丝袜诱惑一区二区| 国产污污在线观看| 黄色一级大片免费| 亚洲va电影大全| 日韩在线精品视频| 欧美午夜电影网| 久久久久久久电影| 久久一区欧美| 国产成人调教视频在线观看| av白虎一区| 四虎影视精品成人| 国产日韩成人内射视频| 欧美亚洲另类在线一区二区三区| 91国产美女在线观看| 亚洲第一级黄色片| 天天色图综合网| 久久影院视频免费| 日韩高清电影一区| 999国产精品视频| 免费一区二区三区在线视频| 2024短剧网剧在线观看| 午夜久久久精品| 亚洲欧美一二三| 91久久伊人青青碰碰婷婷| 久久久国产影院| 日韩一级片在线播放| 亚洲一区二区三区不卡国产欧美| 国产91高潮流白浆在线麻豆 | 欧美日韩国产美| 久久精品一区八戒影视| 日韩中文字幕区一区有砖一区| 国产一区二区三区四区五区传媒 | 蜜桃国内精品久久久久软件9| 2020日本在线视频中文字幕| 中文字幕在线第一页| 免费高清在线观看免费| 亚洲不卡1区| 国产精品对白一区二区三区| 4438全国成人免费| 色婷婷**av毛片一区| 91精品国产综合久久久久久久 | 国产精品丝袜一区| 懂色av一区二区三区免费观看| 一区二区日本视频| 天天做综合网| 欧美调教在线| 日韩精品成人| 91成人在线| а√天堂8资源在线| 阿v免费在线观看| 调教视频在线观看| wwwav91com| 91最新在线观看| 日韩国产欧美亚洲| 69精品丰满人妻无码视频a片| 久久久久高清| 成人综合色站| 国产日韩av在线播放| 日韩欧美一级片| 黄色av网址在线免费观看| 成人动漫av在线| 日本免费高清一区| 久久69精品久久久久久久电影好| 亚洲激情视频在线| 欧美一区二区免费视频| 欧美丝袜自拍制服另类| 狠狠躁夜夜躁人人爽天天天天97| 亚洲综合视频在线观看| 成人免费一区二区三区视频| 国产日韩三级在线| 久久久久88色偷偷免费| 成人av在线影院| 国产高清久久久久| 国产一区二区精品久久99| 麻豆视频观看网址久久| 青娱乐精品视频在线| 视频一区欧美精品| 日韩专区中文字幕一区二区| 久久国产一二区| 欧美中文字幕| 免费黄网站欧美| 精品亚洲欧美一区| 国产精品夜夜爽| 不卡视频一二三四| 99久精品国产| 国产性天天综合网| 国产精品传媒在线| 亚洲综合清纯丝袜自拍| 精品久久香蕉国产线看观看gif| 亚洲一区二区三区四区五区中文| 亚洲最快最全在线视频| 午夜精品久久久久| 一本色道久久综合亚洲aⅴ蜜桃| 日本精品一级二级| 91麻豆精品国产自产在线观看一区 | 男女羞羞网站| 国产一二区视频| 中文字幕免费在线观看| 亚洲成人观看| 色影视在线观看| 成人性生交大片免费看在线播放| 黄在线观看免费网站ktv| 欧美爱爱视频| 国产精品高潮呻吟久久久久| 国产剧情在线观看一区| 亚洲欧美综合久久久| 99pao成人国产永久免费视频| 日韩国产在线一| 高清国产一区二区| 中文字幕欧美国产| 懂色av中文一区二区三区天美| 欧美日韩黄视频| 精品夜色国产国偷在线| 最新国产精品拍自在线播放| 久久免费国产视频| 成人3d动漫一区二区三区91| 一本一本a久久| av五月天在线|