精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Windows Phone應用程序生命周期

移動開發
由于在Windows Phone中,應用程序的運作方式跟以往的 Mobile 系列不同,所以在開發應用程序時要留意有關生命周期的事件,以便在需要的地方加以處理;事件的種類會有Launching、Closing、Activated、Deactivated,而這些事件是在甚么時候會發生呢?

前言

如果在以往,您有用過之前的 Mobile 操作系統,像是 WM5.x、WM6.x ,是允許你在同時間執行很多應用程序;而應用程序的默認行為,在 Form 的右上角是一個『 X 』的按鈕,按鈕按下去之后,應用程序是躲到了背景,仍在繼續在執行;而到了Windows Phone 7,這樣的行為模式變更了,在前景一次只能執行一個應用程序,而原先的應用程序發生了什么事?這就是本篇要跟各位介紹的;而第二個部分是在應用程序中,可 能會存在好幾個頁面,而彼此間要怎么傳遞數據呢?

這都是今天會談論到的議題,那么接下來就開始今天的介紹

議程

Application life cycle

Page Navigation

在頁面中傳遞數據

Idle detection

Application life cycle

由于在 Windows Phone 7 中,應用程序的運作方式跟以往的 Mobile 系列不同,所以在開發應用程序時要留意有關生命周期的事件,以便在需要的地方加以處理;事件的種類會有

Launching

Closing

Activated

Deactivated

而這些事件是在甚么時候會發生呢?下面先來看看第一種狀況

程序生命周期

程序生命周期

應用程序『第一次的啟動』一定是由首頁的 Tile 或是由應用程序行表中啟動,而啟動之后便會產生新的應用程序實例,接著就會進入到 Launching 事件中;在 Launching 事件中您可以做一些初始化的動作,需要特別注意的是在 Launching 事件中, 不適合去做長時間的動作,因為 Launching 事件是發生在頁面顯示之前,所以在Launching 事件沒有完成之前,頁面都是看不到的,整個屏幕都會是黑黑的一片,所以執行長時間的作業的話,是很容易被誤認為應用程序停止響應或是其他的異常情形,這是 不好的。

經過Launching 的事件之后,應用程序的第一個頁面就會顯示出來,這時候會進入到應用程序執行中 ( Running ) 的狀態,而在應用程序的第一個頁面時,如果使用者按下返回鍵,這個時候就會直接引發 Closing 的事件,Closing 事件之后就會把應用程序整個關閉了。

那么,如果在應用程序的第一個頁面中,使用者按下了開始鈕 ( ) ,那這時候呢?關閉應用程序嗎?不,這時候應用程序會進入tombstoning,之后移到背景,讓我們來看看下一張圖

程序生命周期2

程序生命周期2

當在第一個頁面中,使用者按下開始鈕,這個時候應用程序便會進入 Deactivated 的事件,之后便進入 tombstoning 的狀態,也就是整個應用程序會停止運作,這跟之前的 Mobile 5.x/6.x 是有很大的不同的。而在 Deactivated 事件之后,使用者這時候可能會執行其他的應用程序或進行其他的操作,之后可能會按下返回鍵回到應用程序的執行,這個時候就會進入 Activated 事件, Activated 事件處理完畢之后,便會回到執行中的狀態;那在這兩個事件中,要處理甚么呢?您可以在這個事件中去儲存一些暫時性的數據,而這些數據同時又是屬于整個應用 程序會使用到的,就可以在這些事件中去處理。

Deactivated 事件還有個地方需特別注意,所有在 Deactivated 事件中處理的事情,必需要在 10 秒鐘之內處理完畢,不然的話系統會強制的中止你的應用程序,而假設發生這種狀況的話,程序是被整個關閉,按下返回鍵是不會回到應用程序中的,這點必須特別 留意。

舉個簡單的例子,例如說一個很簡單的游戲程序,程序中會有總分數的紀錄,像是下面左圖樣子,現在是 50 分,那如果不小心按到開始鈕或是其他的原因,離開了應用程序,再返回的時候,糟糕..這時候會像下面右圖一樣,變成 0 分了;如果沒有適當的去處理這個部份,那對使用者來說是會覺得很疑惑,而且不是一個好的應用程序的。

程序生命周期3

程序生命周期3

這個時候就可以處理 Deactivated、Activated 事件,在相關的事件中去做儲存的事件,舉個簡單的例子;筆者首先在 App.xaml.cs 中加入一個 HighScore 的全局變量

public static int HighScore;

之后在 App.xaml.cs 中處理相關的事件 ( Application life cycle 相關的事件在 App.xaml.cs 中都可以找到 )

  1. // Code to execute when the application is activated (brought to foreground) 
  2. // This code will not execute when the application is first launched 
  3. private void Application_Activated(object sender, ActivatedEventArgs e) 
  4. object tmp = 0; 
  5. if (PhoneApplicationService.Current.State.TryGetValue("Score"out tmp)) 
  6. App.HighScore = (int)tmp; 
  7. else 
  8. App.HighScore = 0; 
  9.  
  10.  
  11. // Code to execute when the application is deactivated (sent to background) 
  12. // This code will not execute when the application is closing 
  13. private void Application_Deactivated(object sender, DeactivatedEventArgs e) 
  14. PhoneApplicationService.Current.State["Score"] = App.HighScore; 
  15. }  

最后,在 MainPage.xaml.cs 中,Loaded 事件中,把值給讀出來顯示

  1. private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
  2. tbScore.Text = App.HighScore.ToString(); 
  3. }  

這樣子,不管是不小心誤觸到其他按鍵或者是其他原因離開了應用程序都可以正常的保留住想要保留的數據了。

而在上面的程序代碼中,您會看到 PhoneApplicationService.Curent.State ,這是一個實做 IDictionary 的類別,使用時要加入 Microsoft.Phone.Shell 的命名空間,之后就可以它用來儲存一些應用程序中的數據。

注:應用程序執行中,用戶按下開始鈕,或是執行 Lanucher/Chooser 、拍照等等,或是一段時間沒有使用而進入鎖定;只要是離開應用程序本身,就會開始進入 Deactivated 事件

Page Navigation

在剛剛我們看過了應用程序的生命周期,那么頁面呢?緊接著就來看看在頁面顯示的過程中,以及在頁面中去巡覽的時候,應用程序是如何處理這些事件的;在這邊需要注意的是件有

Loaded

每一次頁面的載入完成時,都會引發 Loaded 事件

Unloaded

當從這個頁面要巡覽到另外一個頁面時,就會引發 Unload 事件

OnNavigatedFrom

當利用 NavigationService ,要從頁面離開時會引發 OnNavigatedForm 事件,使用時必須要覆寫 Page 事件

OnNavigatedTo

當利用 NavigationService ,尋覽到新的頁面時,會引發新頁面的 OnNavigatedTo 事件,使用時必須要覆寫 Page 事件

其中如果要處理 OnNavigatedTo、OnNavigatedForm 事件是必須利用覆寫的方式來使用,而事件發生的順序會是 OnNavigatedTo à Load à OnNavigatedForm à UnLoaded。

而在 Page 的這些事件中,要處理甚么動作呢?在頁面相關的事件中,要處理的是必須要儲存一些暫時性的數據,以便在巡覽的過程中使用;以及在頁面中傳遞數據等動作。當要進行頁面的巡覽動作,通常會利用 NavigationService 來做,例如

  1. NavigationService.Navigate(new Uri("/ThirdPage.xaml"
  2. UriKind.Relative));  

利用這個方式就可以巡覽到下一個頁面,那退回上一個頁面呢?這時候可以利用 GoBack 的方式來返回,例如

  1. NavigationService.GoBack();  

那如果不用 GoBack 的方式,直接也利用 Navigate 的方式指定頁面名稱呢?當然也是可以巡覽到指定的頁面,但是要注意的是,利用 Navigate 方法時,是會產生一個『新』的目標頁面的,這是兩個方式不同的地方;舉個簡單的例子來說;假設在 MainPage 當中,擺放了一個 TextBox ,輸入一些文字之后,巡覽到 SecondPage ;這時候如果使用 GoBack 的方式(或是按下硬件的返回鍵),您會發現 TextBox 會記住剛剛輸入的文字,而如果是用 Navigate 加上指定頁面的方式,您會發現 TextBox 的文字會是默認的初始設定,而不會是剛剛輸入的文字。

到這里,相信您對于頁面以及應用程序的生命周期有大略的認識與了解,而在這些事件 中,最常需要處理的就是去保存應用程序相關的狀態;主要在 Deactivated 以及 Activated 這類事件中處理的是整個應用程序通用性的數據或是狀態;而 OnNavigateTo 這類事件中則是處理頁面使用的暫時數據或是處理其他傳遞過來的數據,接下來就來看一下,在各個頁面中傳遞數據是用什么方式進行,以及如何去保存一些應用程 序的狀態。

在頁面中傳遞數據

傳遞數據數據的方式有很多種,可以依照不同的狀況去使用,下面筆者大致列出幾種方式,您可以依照使用的情境以及需求做調整

利用全局變量的方式

自行宣告全局變量或是在 App 類別中 ( App.xaml.cs ) ,去建立相關的屬性 ( property ) 或是字段 ( flied )

例如說,筆者在 App.xaml.cs 中去新增一個字符串變量,大概像這個樣子

  1. public static string SharedString = "";  

之后在主要頁面 ( main page ) 中,就可以利用下面的方式來儲存要傳遞的數據

  1. App.SharedString = textBox1.Text; 
  2. NavigationService.Navigate(new Uri("/Page_UseApp.xaml"
  3. UriKind.Relative));  

而接著在新的頁面中,就可以在 OnNavigateTo 的事件中去取值,并且把值顯示出來,例如

  1. protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
  2. base.OnNavigatedTo(e); 
  3. textBox1.Text = App.SharedString; 
  4. }  

筆者這邊是利用簡單的字符串變量來做示范,實際使用時您也可以用自定義類別或是其他的數據類型來使用,這就看您實際的需求;而在 App 類別中的相關數據是整個應用程序都可以共享的。

利用 Url 參數傳遞

利用像是 SecondPage.xaml?para1=12345¶2=aaaaa 的方式來傳遞數據,這樣的方式跟以往在開發 Web 應用程序的時候是極其類似的;例如說在主要頁面中,筆者以下面的方式來呼叫 Navigate 方法

  1. private void btnUseUrl_Click(object sender, RoutedEventArgs e) 
  2. NavigationService.Navigate(new Uri("/Page_UseUrl.xaml?msg="+ textBox1.Text, UriKind.Relative)); 
  3. }  

而在目標頁面中,就可以利用 NavigationContext 來取值,例如

  1. protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
  2. base.OnNavigatedTo(e); 
  3. textBox1.Text = NavigationContext.QueryString["msg"]; 
  4. }  

在小量的資料傳遞下,可以采用這種方式將資料傳遞到另一個頁面中。

利用 PhoneApplicationSerivce 中的 State 屬性

State 是一個實做 IDictionary 的類別,可以用來保存應用程序的相關數據;使用時感覺跟全局變量的方式有點類似,因為它也是在整個應用程序中都可以去使用的;使用時要特別留意 Key 的命名,不能重復使用;而要使用時,必須要先引用 Microsoft.Phone.Shell 的命名空間,在 main page 的部分大概會利用像是下面這樣的方式來做使用

  1. private void btnUseState_Click(object sender, RoutedEventArgs e) 
  2. PhoneApplicationService.Current.State["msg"] = textBox1.Text; 
  3. NavigationService.Navigate(new Uri("/Page_UseState.xaml", UriKind.Relative)); 
  4. }  

而在目標頁面中,取值得方式大致會像這個樣子

  1. protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
  2. base.OnNavigatedTo(e); 
  3. object data = null
  4. if (PhoneApplicationService.Current.State.TryGetValue("msg"out data)) 
  5. textBox1.Text = (string)data; 
  6. else 
  7. textBox1.Text = "error"
  8. }  

TryGetValue 是為了防止對應的 Key 值不存在而使用的,或是您也可以利用 try…catch 來做,這個地方要記得要加上適當的錯誤處理。而像是先前在 life cycle 中提到的部分,如果您是將值保存到 State 中,那么除非應用程序結束,不然在 Deactivated、Activated 事件中,您還是可以去存取到相關的數據。

利用 Isolated storage

永久性的數據應該使用隔離儲存區來儲存,以便下次程序開啟時能夠繼續的使用;還記得在前幾集討論過的隔離儲存區使用嗎?記得要引入相關的命名空間,筆者下面舉個簡單的例子;

  1. using System.IO.IsolatedStorage; 
  2. using System.IO;  

在寫入檔案部分的程序代碼大致會像下面這樣子

  1. private void btnUseStorage_Click(object sender, RoutedEventArgs e) 
  2. IsolatedStorageFile isofile = IsolatedStorageFile.GetUserStoreForApplication(); 
  3. if (isofile.FileExists("/data.txt")) 
  4. isofile.DeleteFile("/data.txt"); 
  5. StreamWriter sw = new StreamWriter(isofile.CreateFile("/data.txt"), System.Text.Encoding.UTF8); 
  6. sw.WriteLine("Some data from isolated storage"); 
  7. sw.Close(); 
  8. sw.Dispose(); 
  9. isofile.Dispose(); 
  10.  
  11. NavigationService.Navigate(new Uri("/Page_UseStorage.xaml", UriKind.Relative)); 
  12. }  

而讀取的部分,通常來說,使用隔離儲存區時可能會放置較多的數據,所以筆者這邊在讀取時多建立一條線程來做讀取的動作,并且延遲 1500ms 來模擬這樣的效果,讀取動作的程序代碼大概會像這樣子

  1. namespace NavigateDemo 
  2. public partial class Page_UseStorage : PhoneApplicationPage 
  3. Thread Readthread = null
  4.  
  5. public Page_UseStorage() 
  6. InitializeComponent(); 
  7.  
  8. protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
  9. base.OnNavigatedTo(e); 
  10. //將progessbar設定為可見,並且將資料顯示部分設定為隱藏 
  11. textBlock1.Visibility = System.Windows.Visibility.Collapsed; 
  12. textBox1.Visibility = System.Windows.Visibility.Collapsed; 
  13. progressBar1.Visibility = System.Windows.Visibility.Visible; 
  14. //啟動執行續作業 
  15. Readthread = new Thread(ReadStorageFile); 
  16. Readthread.Start(); 
  17.  
  18. private void ReadCompleted(string value) 
  19. progressBar1.Visibility = System.Windows.Visibility.Collapsed; 
  20. textBlock1.Visibility = System.Windows.Visibility.Visible; 
  21. textBox1.Visibility = System.Windows.Visibility.Visible; 
  22. textBox1.Text = value; 
  23.  
  24. //資料讀取完畢時,更新UI使用的委派事件 
  25. delegate void deReadCompleted(string value); 
  26. private void ReadStorageFile() 
  27. Thread.Sleep(11500); 
  28. IsolatedStorageFile isofile = IsolatedStorageFile.GetUserStoreForApplication(); 
  29. if (isofile.FileExists("/data.txt")) 
  30. StreamReader sr = new StreamReader(isofile.OpenFile("/data.txt", FileMode.Open), System.Text.Encoding.UTF8); 
  31. string tmpString = sr.ReadLine(); 
  32. sr.Close(); 
  33. sr.Dispose(); 
  34. this.Dispatcher.BeginInvoke(new deReadCompleted(ReadCompleted), new object[] { tmpString }); 
  35. else 
  36. this.Dispatcher.BeginInvoke(new deReadCompleted(ReadCompleted), new object[] { "file not found.." }); 
  37. isofile.Dispose(); 
  38. }  

這邊在讀取時,利用 progessbar 來顯示正在讀取中的狀態,畫面大致會像下面左圖,而讀取完畢時再將數據顯示在畫面上

Idle detection

最后我們來看 Idle detection 的部分;什么是 Idle detection 呢?這功能就是在設定系統閑置相關的偵測;例如說,如果裝置一段時間沒有使用(操作)的話,那么首先系統會將屏幕變暗,以節省電源,而再經過一段時間之 后,便會鎖定裝置,將屏幕整個關閉,而這時候就會進入了上面生命周期提到的 Deactivated 事件,之后應用程序也進入 tombstoning 的狀態。那么當應用程序是用于撥放音樂,當裝置鎖定的情形下,我們仍然希望應用程序可以繼續運作;或者應用程序是利用裝置上的 sensor ( 例如 accelerometer ) 來進行,在應用程序執行過程中,可能長時間都不會有使用觸控屏幕的情形,但這時候不希望系統進入待機的狀態,那么這時候就要設定 Idle detection 了。

在開始之前,要先提醒各位,在 Idle detection 的部分,MarketPlace 遞交應用程序時是有一些規定的,請一定要確認 Windows Phone 7 Application Certification Requirements 中的相關規定,不然應用程序是不能夠上架的。您可以在文件中的 6.3 節『 Applicatins Running under a Locked Screen 』中找到相關的資料。

好,了解該注意的事項之后,首先來看看偵測閑置的模式;在 Windows Phone 7 中,Idle detection 有兩種

ApplicationIdleDetectinMode

UserIdleDetectionMode

我們先來看 ApplicationIdleDetection 的部分;ApplicationIdleDetection 是應用程序閑置狀態偵測,例如經過一段時間沒有使用的話,裝置會進入鎖定,并且引發應用程序的 Deactivated 事件,隨后應用程序進入 tombstoning 狀態;ApplicationIdleDetectionMode 便是設定裝置進入鎖定時,應用程序會不會進入 tombstoning 狀態,如果設定為關閉,那么將不會引發應用程序的 Deacticated 事件,也不會將應用程序進入 tombstoning ;好處是甚么呢?大約有下列幾點

應用程序仍然在執行中

當用戶返回應用程序時,由于沒有進入 tombstoning 的狀態,能夠快速回復

而要注意的地方約略如下

應用程序仍然在執行,所以會繼續的消耗電池的電力;請特別注意,裝置同樣會進入鎖定狀態,只是應用程序不會停止

所有有關 UI 的更新動作應該要停止,以節省電力的消耗

所有動畫、Timer 等動作應該要停止

Sensor 將會停止回報(例如 accelerometer 將會停止回報目前的數值)

在改變閑置偵測模式時,永遠要先詢問使用者是否同意

那么問題來了,要怎么去知道目前 ApplicationIdleDetectionMode 的狀態,以及怎么知道目前裝置是不是要被鎖定了,進而做相關的處理動作呢?

這里我們借用一下 MSDN 網站上的圖片來做說明

程序生命周期4

程序生命周期4

最外層的部分是 PhoneApplicationFrame ,裝載了整個應用程序,包含 Page、Page 中顯示的內容、 System tray(page 最上方顯示時間、訊號狀態的狀態欄)、 Application bar 等;在一個應用程序中只會有一個 frame ,也是整個應用程序最上層的容器;frame 會回報目前頁面的方向、目前可用(可供應用程序使用)的空間有多少等等,以便讓各種應用程序有相同的行為與特性,而 Obscured、UnObscured 事件,這兩個事件便是發生在 PhoneApplicationFrmae 中,接下來我們來看一下程序代碼的部分

  1. using Microsoft.Phone.Shell; 
  2. Pprivate void SetAppIdleDetectionDisable() 
  3. //將應用程式閒置狀態偵測關閉 
  4. PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Disabled; 
  5. PhoneApplicationFrame root = (App.Current.RootVisual) as PhoneApplicationFrame; 
  6. if (root != null
  7. root.Obscured += new EventHandler(root_Obscured); 
  8. root.Unobscured += new EventHandler(root_Unobscured); 
  9. else 
  10. MessageBox.Show("Error"); 
  11. }  

在程序代碼中可以看到,在把閑置狀態偵測關閉之后,接著就是取得 PhoneApplicationFrame ,而 PhoneApplicationFrame 時也是透過 App 類別來取得,取得之后由于在相關的事件必須要有對應的處理動作,因此必須要掛載相關的事件;其中 Obscured 事件便是當進入鎖定時會引發的事件,在這個事件中,可以去做將 Storyboard、UI 的更新動作停止的相關動作,例如下面這邊以一個 Timer 為例子,在這個事件中會進行關閉的動作

  1. void root_Obscured(object sender, ObscuredEventArgs e) 
  2. Debug.WriteLine("Unobscured"); 
  3. if (e.IsLocked) 
  4. //當應用程式被Lock screen覆蓋時要處理的動作,停止動畫(storyboard)、UI更新等動作 
  5. timer.Stop(); 
  6. }  

這樣子就可以達到在裝置進入鎖定時,能夠把一些不需要用到的部分關閉,以節省電力的使用。看完了關閉之后,那如果要重新把閑置狀態偵測給開啟呢?設定回 Enable 就可以了?這個動作沒有錯,但是目前的 Windows Phone 7 版本尚未支持,目前閑置模式關閉之后,要重新啟動唯一的方式就是整個應用程序必須要重新開啟才行,這部分要特別留意。而 MSDN 中有提到,建議還是可以在應用程序中加入相關的程序代碼,但同時要做錯誤處理,例如說

  1. private void SetAppIdleDetectionEnable() 
  2. if (PhoneApplicationService.Current.ApplicationIdleDetectionMode != IdleDetectionMode.Enabled) 
  3. try 
  4. PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode.Enabled; 
  5. catch (InvalidOperationException ex) 
  6. //platform not souported 
  7. MessageBox.Show("Can't enable application idledection"); 
  8. }  

這樣在未來的更新中,系統支持上來之后,你的應用程序功能就可以立刻的正常運作了。

接下來來看 UserIdleDetectionMode 的部分,這個部分是偵測使用者閑置的狀態,使用的方式跟剛剛 ApplicationIdleDetection 是極其類似的,主要的差異性筆者大致列一下

以目前來說,使用者閑置是指『當用戶沒有觸碰屏幕操作,或是點選硬件按鍵時』,Sensor 的部分目前即使有改變(例如說轉向等等),也是視為閑置中,這個部分在未來的更新中可能會有變更

當設定為 Disable 時,裝置永遠不會進入鎖定

UserIdleDetectionMode 是支持 Disable 以及 Enable 的

在關閉的時候,程序代碼的部分大致會像下面這樣

  1. private void SetUserIdleDetectionDisable() 
  2. PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled; 
  3. }  

跟先前操作 ApplicationIdleDetection 的部分幾乎是相同的,而重新啟動的部分也是相當的類似

  1. private void SetUserIdleDetectionEnable() 
  2. if (PhoneApplicationService.Current.UserIdleDetectionMode != IdleDetectionMode.Enabled) 
  3. try 
  4. PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Enabled; 
  5. catch (Exception ex) 
  6. //platform not souported 
  7. MessageBox.Show("Can't enable user idledection"); 
  8. }  

這樣便可以達到停止閑置狀態的偵測,這對于一些單純利用 Sensor 來進行操作的應用程序是相當有用的。

責任編輯:閆佳明 來源: wpdever
相關推薦

2012-05-28 15:37:20

WP程序生命周期

2014-07-16 13:39:30

Windows Pho

2015-07-09 15:42:48

ios應用生命周期

2011-07-20 15:58:58

iPhone 應用程序 生命周期

2009-06-24 10:34:39

JSF生命周期JSF應用程序

2011-08-10 16:50:10

iPhone生命周期

2014-07-11 11:09:10

App應用程序生命周期

2013-09-26 11:20:34

Informatica

2014-02-24 10:50:32

DevOps云應用

2023-12-21 08:00:00

ChatGPT人工智能大型語言模型

2010-08-01 15:29:04

AndroidDalvik

2014-09-28 11:28:02

Android應用程序生命周期

2025-04-28 01:22:00

2012-08-16 09:38:38

ASP.NET

2010-04-02 09:02:02

ASP.NET MVC

2012-06-20 10:29:16

敏捷開發

2013-07-30 13:38:27

Windows PhoWindows Pho

2013-08-01 09:40:51

Windows 8.1

2011-03-21 09:05:40

IronRubyWindows Pho

2010-11-03 15:10:04

SilverlightSilverlightWindows Pho
點贊
收藏

51CTO技術棧公眾號

永久免费看片视频教学| 国产精品日韩欧美综合| 爱情岛论坛亚洲自拍| 主播国产精品| 风间由美性色一区二区三区 | 欧美日韩国产第一页| 日韩精品一区二区三区色欲av| 午夜一区在线观看| 另类天堂av| 中文在线资源观看视频网站免费不卡| 成 人 黄 色 小说网站 s色| 国产成人l区| 国产成人亚洲精品青草天美 | 成人在线免费观看| 激情久久五月天| 欧美精品videossex性护士| 日韩久久久久久久久久久| 午夜成年人在线免费视频| 成人黄色小视频在线观看| 777777777亚洲妇女| 色无极影院亚洲| 亚洲a成人v| 婷婷综合另类小说色区| 先锋影音亚洲资源| 人妻精品一区一区三区蜜桃91| 久久久久网站| 美女av一区二区三区| 久久久久成人精品无码中文字幕| 日韩毛片免费观看| 亚洲精品一二三| 欧美极品色图| 精品乱子伦一区二区| 性色av一区二区怡红| 久久久国产影院| 成人免费毛片糖心| 91久久精品无嫩草影院| 色欧美88888久久久久久影院| 欧美日韩午夜爽爽| 国产一二三区在线视频| 成人国产精品免费网站| 国产精品美腿一区在线看| 日产精品久久久久| 亚洲在线久久| 国产亚洲欧洲在线| 一起草在线视频| 欧美日韩国产一区二区在线观看| 在线视频一区二区三区| 九九爱精品视频| 成人免费网站在线观看视频| 国产色产综合产在线视频 | 欧美亚洲福利| 91官网在线免费观看| 人人妻人人澡人人爽欧美一区双| 天堂аⅴ在线地址8| 久久综合丝袜日本网| 欧美巨乳美女视频| 妖精视频在线观看免费| 精品国产成人| 伊人av综合网| 毛片久久久久久| 91欧美大片| 北条麻妃在线一区二区| 91香蕉视频在线播放| 婷婷综合社区| 欧美成年人视频网站欧美| 黄色片在线观看网站| 中文字幕一区二区三三| 九九精品视频在线观看| 精品99在线观看| 禁久久精品乱码| 97涩涩爰在线观看亚洲| 久久久精品福利| 日韩高清欧美激情| 国产欧美中文字幕| 国产毛片毛片毛片毛片| 国产精品系列在线观看| 国产欧美日韩亚洲| 欧美高清电影在线| 中文字幕在线播放不卡一区| 超碰97免费观看| 91老司机福利在线| 一本大道久久a久久综合| 男女视频在线看| 久久精品九色| 日韩高清有码在线| 精品无码在线观看| 欧美大片一区| 日本成人免费在线| 国产一区二区在线播放视频| 丁香五精品蜜臀久久久久99网站| 免费在线成人av| 黄视频网站在线| 亚洲成av人片在线观看无码| 国产激情在线观看视频| 久久中文字幕一区二区| 亚洲国产精品电影在线观看| 国产精品视频在| 黄色欧美日韩| 国产精品久久久久久网站 | 日韩成人高清在线| 香蕉久久久久久久| 日韩亚洲精品在线| 成人午夜激情网| 天堂中文在线看| 最近中文字幕一区二区三区| 欧美成人免费在线观看视频| 少妇高潮一区二区三区99| 亚洲国产日韩精品在线| 91无套直看片红桃在线观看| 国产视频久久| 亚洲aⅴ男人的天堂在线观看| 青青久在线视频| 一区二区三区在线看| 欧美国产日韩在线播放| 久草精品视频| 久久成人一区二区| 欧产日产国产69| 成人手机电影网| 一区二区三区在线观看www| 麻豆视频在线看| 日韩一卡二卡三卡国产欧美| 影音先锋制服丝袜| 国产色综合网| av成人综合网| 麻豆视频网站在线观看| 色综合欧美在线视频区| 美女露出粉嫩尿囗让男人桶| 欧美freesextv| 国产高清视频一区三区| 色婷婷中文字幕| 亚洲精品日韩综合观看成人91| 男操女免费网站| 天海翼亚洲一区二区三区| www.久久色.com| 午夜一区二区三区四区| 2021国产精品久久精品| 黄色www网站| 国产精品任我爽爆在线播放| 欧美乱大交做爰xxxⅹ性3| 亚洲一区 中文字幕| 国产情人综合久久777777| 日韩欧美一区三区| 免费福利视频一区| 久久频这里精品99香蕉| 亚洲第一天堂影院| 一区二区三区美女| 中文字幕一二三区| 欧美激情第二页| 2014亚洲精品| 色yeye免费人成网站在线观看| 欧美一区二区精品在线| 加勒比婷婷色综合久久| 精品一区二区三区av| 亚洲午夜激情| 自拍偷拍亚洲| 久久久久北条麻妃免费看| 国产精品区在线观看| 中文幕一区二区三区久久蜜桃| 黄色一级二级三级| 国产成人ay| 青青久久av北条麻妃黑人| 日韩在线无毛| 欧美亚洲一区三区| 国产精品国产三级国产传播| 国产精品911| 日韩欧美一区二| 亚洲肉体裸体xxxx137| 国产成人免费av| eeuss影院在线观看| 欧美日韩国产乱码电影| 亚洲欧美小视频| 成人精品国产一区二区4080| 国产毛片视频网站| 久久99精品久久久久久园产越南| 国产成人综合亚洲| 国产婷婷视频在线| 精品国产一二三区| 人人爽人人爽人人片av| 中文字幕欧美一区| 亚洲色偷偷色噜噜狠狠99网| 国产精品腿扒开做爽爽爽挤奶网站| 欧美日韩一区二区三区在线视频| www.国产精品| 欧美激情欧美狂野欧美精品| 伦理片一区二区三区| 欧美另类一区二区三区| 国产在线视频你懂的| 久久久久久麻豆| 91精品999| 亚洲精品123区| 视频在线观看成人| 99久热这里只有精品视频免费观看| 欧美最猛性xxxxx(亚洲精品)| 青青青青在线| 日韩av在线网址| 亚洲天天综合网| 亚洲国产成人精品视频| 精品熟妇无码av免费久久| 国产高清久久久久| 久久九九国产视频| 黑人一区二区| 亚洲欧洲久久| 日韩三级毛片| 亚洲一区亚洲二区| 欧美大电影免费观看| 欧美成人免费网| 国产免费av在线| 精品国产一区二区三区不卡| 中文天堂在线资源| 精品二区三区线观看| 91香蕉一区二区三区在线观看| 2021国产精品久久精品| 可以看的av网址| 蓝色福利精品导航| 一本大道熟女人妻中文字幕在线| 中文字幕亚洲综合久久五月天色无吗''| 久久久久高清| 超碰在线亚洲| 亚洲综合在线中文字幕| 福利视频一区| 日本亚洲欧美成人| 国产伦理精品| 欧美激情在线视频二区| 国产黄色在线网站| 中文字幕欧美精品在线| 九色在线观看| 日韩电影免费在线观看中文字幕| www.97av| 91精品国产91久久久久久一区二区| 午夜久久久久久久久久影院| 亚洲成人中文在线| 激情四射综合网| 亚洲蜜桃精久久久久久久| 亚洲av无一区二区三区| 国产日韩精品一区二区三区在线| 亚洲中文字幕无码av| 粉嫩av亚洲一区二区图片| 91亚洲一区二区| 狠狠色2019综合网| 一区二区三区四区毛片| 久久精品国产99久久6 | av在线日韩| 日本一区二区在线播放| 亚洲女同av| 日韩av三级在线观看| 在线观看网站免费入口在线观看国内 | 人妻 丝袜美腿 中文字幕| 国产精品中文字幕日韩精品| 91香蕉国产线在线观看| 国产盗摄视频一区二区三区| 色姑娘综合天天| 国产sm精品调教视频网站| 国产chinesehd精品露脸| 国产a精品视频| 亚洲精品成人无码毛片| 成人美女在线观看| 最近中文字幕无免费| 久久综合九色综合欧美就去吻| 草草地址线路①屁屁影院成人| 久久久久久久久久久久久夜| 天天躁夜夜躁狠狠是什么心态| 国产欧美精品区一区二区三区| 手机毛片在线观看| **性色生活片久久毛片| 成人观看免费视频| 欧美日韩精品在线视频| 日韩在线视频不卡| 欧美日韩卡一卡二| 亚洲av无码乱码国产麻豆| 亚洲精品www久久久| 精品视频三区| 久久精品视频免费播放| 免费毛片在线看片免费丝瓜视频 | 免费日本一区二区三区视频| 中文字幕亚洲字幕| av在线免费观看网址| 97久久精品国产| 欧美aaa大片视频一二区| 国产欧美精品xxxx另类| 中文字幕日韩高清在线| 久久久99国产精品免费| 欧美一区二区麻豆红桃视频| www亚洲国产| 99热免费精品在线观看| 亚洲xxxx2d动漫1| 国产成人在线视频网站| 国产精品1000部啪视频| 中文字幕高清不卡| 久久婷婷一区二区| 在线观看一区日韩| www.久久久久久| 亚洲人午夜精品| 最爽无遮挡行房视频在线| 日本中文字幕久久看| 中文成人在线| 欧洲精品久久| 亚洲小说欧美另类婷婷| 亚洲少妇久久久| 99久久伊人精品| 高h视频免费观看| 在线观看一区不卡| 蜜桃av中文字幕| xvideos亚洲人网站| 成人美女视频| 国产精品v欧美精品∨日韩| 日韩国产一区二区| 国产免费黄视频| 国产一区二区三区在线观看精品| wwwwxxxx国产| 亚洲国产一区二区三区青草影视| 中文在线字幕免费观| 日韩成人高清在线| 欧美14一18处毛片| 成人国产精品一区二区| 国产一区2区| 鲁一鲁一鲁一鲁一色| 国产福利一区二区| 最新日韩免费视频| 在线观看不卡一区| 你懂的在线免费观看| 久久久久久国产精品三级玉女聊斋| 欧美久久久网站| 日韩电影大全在线观看| 国产亚洲在线| 精品熟女一区二区三区| 一区av在线播放| 国产美女免费视频| 日韩中文字幕免费| 国产第一亚洲| 亚洲成人自拍视频| 日韩综合在线视频| 一级黄色片大全| 黑人巨大精品欧美一区二区三区| 秋霞av鲁丝片一区二区| 欧美激情影音先锋| 亚洲网一区二区三区| 日本美女爱爱视频| 国产精品88888| 国产这里有精品| 日韩一区二区高清| 人人超在线公开视频| 亚洲综合中文字幕在线| 中文无码久久精品| 性折磨bdsm欧美激情另类| 亚洲三级电影全部在线观看高清| 中文字幕永久在线观看| 国产亚洲视频中文字幕视频| 国产69精品久久久久9999人| 亚洲国内在线| 蜜臀99久久精品久久久久久软件| 五月婷婷欧美激情| 欧美日韩激情一区二区三区| 91成人高清| 成人精品视频久久久久| 一区二区三区四区在线观看国产日韩| 1314成人网| 亚洲一区二区成人在线观看| 天堂中文在线看| 国产成人啪精品视频免费网| 日韩久久久久| 日韩av影视大全| 亚洲成在人线免费| 日韩欧美在线番号| 国产精品福利小视频| 久久综合成人| 女人扒开腿免费视频app| 亚洲大片在线观看| 青青免费在线视频| 国产精品网站视频| 亚洲精品二区三区| 国产婷婷在线观看| 色欧美乱欧美15图片| 久久综合之合合综合久久| 成人动漫视频在线观看完整版| 亚洲黄色大片| 国产黄色大片免费看| 91精品国产综合久久国产大片| 金瓶狂野欧美性猛交xxxx| 久久99精品国产99久久| 日韩av一级电影| 东方av正在进入| 日韩h在线观看| 黄色日韩网站| 日韩伦理在线免费观看| 国产区在线观看成人精品| 国产普通话bbwbbwbbw| 97在线观看视频国产| 日韩欧美视频| 波多野结衣加勒比| 欧美视频第二页| 丁香花在线影院| 一区二区日本| av不卡免费电影| 亚洲中文字幕在线观看| 久久久久久久国产| 成人av国产| 黑丝av在线播放| 欧美疯狂做受xxxx富婆| 蜜桃视频动漫在线播放| 在线视频一二三区|