青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 55  文章 - 15  trackbacks - 0
<2012年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用鏈接

留言簿

隨筆分類

隨筆檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

參考文獻(xiàn):
    1. 31 days of Windows 8#12 Background Task: http://www.jeffblankenburg.com/2012/11/12/31-days-of-windows-8-day-12-background-tasks/
    2. 31 days of Windows 8 #11 Lock Screen      : http://www.jeffblankenburg.com/2012/11/11/31-days-of-windows-8-day-11-lock-screen-apps/ 
    3. Background Task 白皮書: http://www.microsoft.com/en-us/download/details.aspx?id=27411

在使用鎖屏應(yīng)用的時候,你要保證你明白自己要做些什么準(zhǔn)備:
1. 使用Wide Logo,即你要提供wide logo 310*150
2. 使用Badge, 即你要提供badge logo 24*24
3. 使用Background Task, 而且background task 支持的事件是Control channel, timer, push notification類型。
4. 設(shè)置你的Background Task的EntryPoint
5. 你需要在Manifest里面聲明你使用LockScreen。
具體的操作步驟大家可以參考文獻(xiàn)2。
      鎖屏應(yīng)用比較簡單,重要的一點是,如果你在程序中詢問了用戶是否允許使用鎖屏應(yīng)用,你將只有這一次修改的機(jī)會,不然你就只能通過PC Control進(jìn)行設(shè)置了。但是如果你的Windows 8 沒有激活的話,你只能卸載應(yīng)用程序,重新安裝一遍了。
     
代碼如下:

 1     //要先請求允許,如果允許的話,你才能更新Badge,如果沒有這一步,Badge將 不會顯示在LockScreen上面
 2     create_task(BackgroundExecutionManager::RequestAccessAsync()).then([this](BackgroundAccessStatus status)
 3     {
 4         //這一步可以不要
 5         //BackgroundAccessStatus status1 = BackgroundExecutionManager::GetAccessStatus();
 6         if((status == BackgroundAccessStatus::AllowedWithAlwaysOnRealTimeConnectivity)||
 7             (status == BackgroundAccessStatus::AllowedMayUseActiveRealTimeConnectivity))
 8         {
 9             XmlDocument^ badgeData = BadgeUpdateManager::GetTemplateContent(BadgeTemplateType::BadgeNumber);
10             XmlNodeList^ badgeXML = badgeData->GetElementsByTagName("badge");
11             ((XmlElement^)badgeXML->Item(0))->SetAttribute("value","Playing");
12 
13             BadgeNotification^ badge = ref new BadgeNotification(badgeData);
14             BadgeUpdateManager::CreateBadgeUpdaterForApplication()->Update(badge);
15         }
16     });

運行,然后會彈出一個對話框,像這樣

點擊Allow之后,按下WIN+L你就可以看到鎖屏上面出現(xiàn)的Badge圖片和你的number了。
一般情況下,我們會使用后臺任務(wù)(Background Task)來更新Lock Screen App的數(shù)據(jù)。

后臺任務(wù)
1. 什么是后臺任務(wù)?
       后臺任務(wù)是:即使程序已經(jīng)被掛起或者不在運行了,還在默默地執(zhí)行的任務(wù)。
2. 后臺任務(wù)與前臺任務(wù)的區(qū)別?
       首先,前臺任務(wù)占據(jù)了整個屏幕,用戶直接與其進(jìn)行交互。后臺任務(wù)不能與用戶交互,除了(Tile, Toast, 和Lock Screen)
       其次,因為前臺要與用戶交互,它使用所有可用的系統(tǒng)資源,包括CPU time 和Network資源,并且不受限。后臺任務(wù)使用系統(tǒng)資源的時候是受限制的。
       再次,前臺任務(wù)處理主要事務(wù),后臺任務(wù)處理短時間、輕量級的事務(wù)。
       最后,后臺任務(wù)不論前臺任務(wù)是否處于Running狀態(tài),它都會運行。
3. 后臺任務(wù)的目的?
       大家都知道,Windows 8 應(yīng)用程序的生命周期分為Running,Suspended,Terminated三種狀態(tài)。App處于前臺時,為Running狀態(tài),處于后臺時,為Suspended狀態(tài),用戶關(guān)閉App時或者在Suspended狀態(tài)太久,系統(tǒng)自動關(guān)閉App時,為Terminated狀態(tài)。
       我們可以從Suspended狀態(tài)將App變?yōu)镽unning狀態(tài),我們不能在后臺運行太復(fù)雜,太耗時耗資源的程序,因為如果你這么做了,你將會非常耗費電量,并且,用戶切換回前臺時,會感覺到非???,有延遲。
       因為上述的目的:延長電池用量,保證用戶流暢的體驗,我們需要限制后臺任務(wù)對資源的使用,而且我們的后臺任務(wù)要盡量精簡。
4. 后臺任務(wù)的執(zhí)行環(huán)境?
       一般情況下,我們都要把我們的后臺任務(wù)作為一個Runtime Component,引用到主工程中去。這樣,一個后臺任務(wù)就是一個class library,一個in-proc server DLL。這個library可以在我們的App中運行,也可以在系統(tǒng)提供的主機(jī)環(huán)境中運行(BackgroundTaskHost.exe)。這個exe是在App相同的容器內(nèi)運行,當(dāng)它不需要的時候,會自動退出。
5. 后臺任務(wù)的適合場景?
       播放音樂,上傳下載文件,刷新瓷貼、通知、LockScreen,應(yīng)用程序間共享合約。下載Mail,VOIP、IM信息,用戶改變系統(tǒng)設(shè)置
6. 后臺任務(wù)基本概念?
      Background task  一個實現(xiàn)了IBackgroundTask接口的類
         A class or JavaScript page implemented by the app to provide functionality even if the app is not in the foreground.
      Background trigger 一系列事件,每個后臺任務(wù)都需要至少一個Trigger
         A system-defined event that an app can associate with a background task. When the trigger is fired by the system, an app  background task that is associated with the trigger is launched. 
      Background condition 一些必須滿足的條件,可以有,也可以沒有condition
         A set of zero or more conditions that need to be satisfied before the background task can run. 
      BackgroundTaskHost.exe 一個裝載后臺任務(wù)的容器
         A system-provided host executable to run the background task. 
      EntryPoint 一個實現(xiàn)了IBackgroundTask接口的類的名字
         The name of the C# or C++ class that implements the background task. 
      Executable 
         The name of the executable that hosts the background task class. 
      Foreground app
         The app that the user is actively interacting with.
      Lock screen  Win+L就可以看到你的Lock Screen了
         This is the first screen shown following a Windows 8 boot, resuming from sleep, or locking your PC. It presents a user-customizable surface that both conveys information and protects against accidental logon attempts. 
     Start page 
         The name of the JavaScript page that implements the background task. 
7. 后臺任務(wù)的運行原理?
      后臺任務(wù)的注冊,運行,調(diào)試,請參閱參考文獻(xiàn)1,2,3.這里主要介紹一下后臺任務(wù)的運行原理。大家可以參考下圖進(jìn)行理解

     虛線兩邊分別表示App和System,App就是我們的應(yīng)用程序,System就是負(fù)責(zé)處理后臺任務(wù)的Service。
     首先,我們要注冊Trigger,Trigger有多種,大家可以參考文獻(xiàn)3。
     其次,在應(yīng)用程序中注冊后臺任務(wù)(包含了什么樣的Trigger可以觸發(fā)這個后臺任務(wù)),注冊之后,在System Infra中就永久保留了這個注冊信息。不論你是否關(guān)閉了應(yīng)用程序還是重新啟動了電腦,這個注冊信息都會存在。
     再次,當(dāng)合適的Trigger事件來臨,System Infra 會搜索與這個Trigger相匹配的后臺任務(wù)
     最后,啟動該后臺任務(wù)。
我們可以在任務(wù)管理器中找到Background Task Infrastracture Service :

右鍵點擊,Open Service,可以看到具體的描述:


可以看到,這個服務(wù)就是控制哪個后臺任務(wù)可以在系統(tǒng)中運行,也就是我們圖中的System Infra。
8 App狀態(tài)與后臺任務(wù)的關(guān)系    ?
      看到上面的過程,大家或許會疑問,如果Trigger事件來臨,App已經(jīng)關(guān)閉,BackgroundTask還會執(zhí)行么?答案是:一定會,不論你的App是Running還是Suspended或者是Terminated狀態(tài)。
      但是,還記得我們說過的,我們的后臺任務(wù)可以運行于App中,也可以運行于系統(tǒng)提供的環(huán)境中么?
      如果運行于系統(tǒng)提供的環(huán)境中,那么,答案同上,而且App保持原來的狀態(tài)。例如:App是Terminate狀態(tài),后臺任務(wù)運行,App不會啟動,依舊是Terminate狀態(tài)。
      如果運行于App中,那么答案同上,但是App的狀態(tài)會略有不同,這種不同只存在Terminate狀態(tài),如果App是Terminate狀態(tài)的話,Trigger來臨,App會被啟動,但是其UI線程不會被啟動,后臺任務(wù)啟動。也就是說App雖然啟動了,但是不會將App帶回前臺。
      也就是說,無論如何,當(dāng)Trigger事件被觸發(fā),后臺任務(wù)的啟動是由系統(tǒng)來決定的,無論如何后臺任務(wù)都會執(zhí)行,App的狀態(tài)在上述兩種情況下會略有不同。
      另外個人觀點:App只是提供了一個注冊后臺任務(wù)的平臺,注冊了之后,后臺任務(wù)的控制權(quán)就交由系統(tǒng)管理了。
9. 后臺任務(wù)的執(zhí)行環(huán)境 ?
      之前我們已經(jīng)提到,后臺任務(wù)可以在App中運行,也可以在系統(tǒng)提供的主機(jī)中運行。如果沒有特別聲明,后臺任務(wù)是默認(rèn)在系統(tǒng)提供的主機(jī)中運行的,這樣做有一些好處:
      首先,它的啟動同應(yīng)用程序的狀態(tài)無關(guān);
      其次,啟動后臺任務(wù)更快;
      再次,使用的資源更少;
      最后,比在App中啟動擁有更高的性能。
      如何控制后臺任務(wù)在哪個容器下運行呢?這跟Trigger的類型相關(guān):
      不同的后臺trigger對于在什么地方運行有不同的限制。對于默認(rèn)的,沒有指定Executable屬性的時候,后臺任務(wù)是運行在系統(tǒng)提供的主機(jī)中的。App是不能指定Executable屬性的,如果它必須要在系統(tǒng)提供的主機(jī)中與性的。只有那些包含PushNotificationTrigger或者ControlChannelTrigger任務(wù)類型的后臺任務(wù)才能指定Executable屬性。

10. 后臺任務(wù)注冊的持久性?
      
只要你注冊了一個后臺任務(wù),你就可以永久地?fù)碛兴?,不論你的App是什么狀態(tài),也不論你的電腦是否關(guān)閉過,甚至,不論你的應(yīng)用程序有沒有更新過。也就是說后臺任務(wù)注冊的持久性可以跨越App的更新。
       要實現(xiàn)這點必須要注意:你必須要保證你的EntryPoint的一致性,即在新的版本中,同樣的EntryPoint一定要存在。如果不存在了,那么在后臺任務(wù)執(zhí)行中將會出現(xiàn)錯誤。另外,如果我們的新版本中已經(jīng)不再相應(yīng)某trigger的后臺任務(wù)了,怎么辦?新版本的App可以注冊一個ServicingComplete Trigger的后臺任務(wù),用來提醒當(dāng)App更新之后,一個未被注冊的后臺任務(wù)是失效的。
      注意,一旦App被卸載,所有的后臺任務(wù)將不復(fù)存在。
11. 后臺任務(wù)實現(xiàn)中的一些知識點?
      后臺任務(wù)至少應(yīng)該設(shè)置一個Trigger event。
      后臺任務(wù)可以沒有condition,也可以有多個conditions。condition擁有門閂行為,意思是,必須所有的condition都滿足,才能啟動后臺任務(wù),而不管Trigger事件有沒有被觸發(fā)。這種行為像是鎖住了trigger,等到conditions都滿足了才launch 后臺任務(wù)。
      后臺任務(wù)可以向前臺報告其進(jìn)度和完成情況:
     
 1 void SampleBackgroundTask::AttachProgressAndCompletedHandlers(IBackgroundTaskRegistration^ task)
 2 {
 3     auto progress = [this](BackgroundTaskRegistration^ task, BackgroundTaskProgressEventArgs^ args)
 4     {
 5         auto progress = "Progress: " + args->Progress + "%";
 6         BackgroundTaskSample::SampleBackgroundTaskProgress = progress;
 7         UpdateUI();
 8     };
 9     task->Progress += ref new BackgroundTaskProgressEventHandler(progress);
10 
11     auto completed = [this](BackgroundTaskRegistration^ task, BackgroundTaskCompletedEventArgs^ args)
12     {
13         UpdateUI();
14     };
15     task->Completed += ref new BackgroundTaskCompletedEventHandler(completed);
16 }
        但是需要注意的是,每次啟動的時候都要將這兩個事件關(guān)聯(lián)到后臺任務(wù)上,因為這兩個事件不是持久性的,當(dāng)App被關(guān)閉的時候,他們也會被銷毀。

        可以取消后臺任務(wù):
void SampleBackgroundTask::Run(IBackgroundTaskInstance^ taskInstance)
{
    taskInstance->Canceled += ref new BackgroundTaskCanceledEventHandler(this, &SampleBackgroundTask::OnCanceled);
//
}
void SampleBackgroundTask::OnCanceled(IBackgroundTaskInstance^ taskInstance, BackgroundTaskCancellationReason reason)
{
  
    CancelRequested = true;
}
     注意,取消事件和上述兩個事件是在不同的類型對象中關(guān)聯(lián)的。
12. 后臺任務(wù)的資源管理?

     如果App處于前臺,用戶正在與App進(jìn)行交互的時候,那么后臺任務(wù)沒有資源限制。如果一個App沒有在前臺時,限制就出現(xiàn)了。

     文章的開頭已經(jīng)介紹了后臺任務(wù)的執(zhí)行環(huán)境是資源受限制的環(huán)境,那么哪些資源是受限制的呢?
     首先,CPU time,一個Lock Screen App 每15分鐘會獲得2S的CPU時間來處理所有的后臺任務(wù),一個非Lock Screen App每2小時獲得1S的CPU事件來執(zhí)行后臺任務(wù)。這2S是15分鐘的最后2S。如果App使用了所有的CPU事件,那么后臺任務(wù)將會等待下一個15分鐘,如果有分配的事件,那么將會執(zhí)行。


     其次,NetWork。如果App處于AC power模式,那么后臺任務(wù)沒有網(wǎng)絡(luò)資源的限制。Network resource constraints are a function of the amount of energy used by the network interface, which is modeled as the amount of time the network is used to transfer bytes (for download or upload); it is not based on any throughput metrics. The throughput and energy usage of a network interface varies based on factors like link capacity, physical position of the device, or the current load on the WiFi network. WiFi networks typically have lower energy consumption per byte sent and received when compared to cellular mobile networks
   

LockScreen App在1Mbps帶寬下,每15分鐘可以下載0.469MB的數(shù)據(jù),每天下載45MB,在10Mbps帶寬下每15分鐘4.69MB,每天450MB
非LockScreen App 在1Mbps帶寬下,每2小時可以下載0.625MB數(shù)據(jù),每天下載7.5MB,在10Mbps帶寬下每2小時6.25MB,每天75MB
 
13. 后臺任務(wù)執(zhí)行于App中的線程模型?
去耦
對于一個非JavaScript App,后臺任務(wù)位于in-proc DLL中在MTA中加載。一個真正的后臺任務(wù)類可以是STA 或者 MAT線程類型的。因為后臺任務(wù)可以在AppSuspended或者Terminated時運行,他們需要同前臺App解耦。在一個分離的單元中加載后臺任務(wù)的DLL將強(qiáng)制將后臺任務(wù)從App中分離。
當(dāng)一個App處于Suspended狀態(tài)時,UI STA線程被Windows kernel阻塞。這個線程只有當(dāng)App重新回到Runnning狀態(tài)才被release。當(dāng)app在后臺,并且后臺任務(wù)被觸發(fā),App中的所有線程都是非凍結(jié)的,除了UI STA線程,并且后臺任務(wù)被激活于MTA線程中。UI STA持續(xù)被鎖住。如果后臺任務(wù)嘗試著訪問位于UI STA 線程中的對象是,將會出現(xiàn)死鎖。為了避免這種情況,后臺任務(wù)不能同App共享對象。任何共享的對象都要聚合FTM(Free Threaded Marshaler)。Control Channel trigger描述了這種應(yīng)用。

在前臺任務(wù)和后臺任務(wù)之間共享state
Sharing state between the background task and the foreground app 
Another aspect to keep in mind if the background task is loaded within the app instead of the default system-provided host executable is that it cannot rely on accessing the memory of the foreground app. Background tasks run regardless of the current state of the app, so background tasks cannot rely on having the app around when they run. The only reliable way for the background task to share state with the app is to use persistent storage, such as ApplicationData, or files.

14. 使用后臺任務(wù)的建議?
? Design background tasks to be short lived. 
? Design the lock screen user experience as described in the “Guidelines and checklists for lock screen tiles.” 
? Do not specify the Executable attribute to ensure the task launches in the system-provided host.
? Describe the background task class name or JavaScript file name accurately in the manifest. 
? Look in the event viewer for error messages if the background task is not being activated.
? Use persistent storage to share data between the background task and the app. 
? Register for progress and completion handlers in the app. 
? Register for a background task cancellation handler in the background task class. 
? Register for the ServicingComplete trigger if you expect to update the app. 
? Ensure that the background task class library is referenced in the main project and its output type is winmd. 
? Describe the triggers in the background manifest accurately. 
? Verify if the app needs to be on the lock screen.
? Do not display UI other than toast, tiles or badges from a background task. 
? Do not rely on user interaction in background tasks.

15 其他:編程需要注意的細(xì)節(jié):?

如果你的后臺任務(wù)運行任何的異步程序,那么你需要獲得一個defferral。如果沒有這個deferral,Run方法已經(jīng)結(jié)束,異步方法還沒有結(jié)束的情況下后臺任務(wù)將會不正常結(jié)束。

 1 void ExampleBackgroundTask::Run(IBackgroundTaskInstance^ taskInstance)
 2 {
 3     BackgroundTaskDeferral^ deferral = taskInstance->GetDeferral();
 4     
 5     //
 6     // TODO: Modify the following line of code to call a real async function.
 7     //       Note that the task<void> return type applies only to async
 8     //       actions. If you need to call an async operation instead, replace
 9     //       task<void> with the correct return type.
10     //
11     task<void> myTask(ExampleFunctionAsync());
12     
13     myTask.then([=] () {
14         deferral->Complete();
15     });
16 }
17 

查看后臺任務(wù)有沒有注冊,沒有的話注冊一個:
    for each (auto task in BackgroundTaskRegistration::AllTasks)//這里保存了本地的所有的注冊了的后臺任務(wù)。
    {
        if(task->Value->Name == "Class1")
        {
            isRegistered = true;
            break;
        }
    }
    if(!isRegistered)
    {
        RegisterBackgroundTask("TileUpdater", "BackgroundTasks.Class1");
    }

這里使用foreach方法比較簡單。
注冊一個后臺任務(wù)
1 void MainPage::RegisterBackgroundTask(String^ taskName, String^ entryPoint)
2 {
3     BackgroundTaskBuilder^ btb = ref new BackgroundTaskBuilder();
4     btb->Name = taskName;
5     btb->TaskEntryPoint = entryPoint;
6     btb->SetTrigger(ref new SystemTrigger(SystemTriggerType::InternetAvailable,false));
7 
8     BackgroundTaskRegistration^ task = btb->Register();
9 }

我覺得這么總結(jié)一下,后臺任務(wù)的原理神馬的,大家應(yīng)該稍微清楚一些了。關(guān)于后臺任務(wù),我也看了很久,之前都是糊里糊涂的,今天終于算整明白的,希望對大家有用。歡迎交流。
posted on 2013-01-08 13:00 Dino-Tech 閱讀(3499) 評論(0)  編輯 收藏 引用 所屬分類: Windows 8
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美中文字幕在线| 国产精品豆花视频| 日韩午夜av| 亚洲人成人一区二区在线观看| 久热综合在线亚洲精品| 久久综合久久综合久久综合| 免费观看久久久4p| 亚洲毛片av在线| 午夜一区二区三视频在线观看| 亚洲综合成人在线| 麻豆精品在线视频| 国产精品免费一区豆花| 在线播放中文字幕一区| 亚洲午夜在线观看视频在线| 久久本道综合色狠狠五月| 欧美电影在线观看| 99re6这里只有精品| 欧美在线视频全部完| 久久综合久久美利坚合众国| 欧美日韩国产一中文字不卡| 99精品欧美一区| 欧美a级理论片| 国产精品久久久久高潮| 在线观看成人av电影| 亚洲天堂网站在线观看视频| 裸体素人女欧美日韩| 一区二区三区日韩在线观看| 久久综合狠狠综合久久综青草 | 久久网站免费| 亚洲精品一区二区三区在线观看| 亚洲欧美中文日韩在线| 欧美另类久久久品| 伊人天天综合| 先锋影音国产精品| 亚洲精品国产精品国自产在线| 欧美一区二区高清在线观看| 欧美日韩国产综合网| 亚洲国产成人午夜在线一区| 欧美一区二区在线免费观看| 最新高清无码专区| 久久久99国产精品免费| 国产精品亚洲а∨天堂免在线| 99视频在线观看一区三区| 欧美黄色大片网站| 久久综合影视| 亚洲成人在线视频播放| 久久国产精品99久久久久久老狼| 一本到高清视频免费精品| 欧美精品免费播放| 亚洲精品一区二区三区婷婷月| 欧美不卡在线视频| 久久亚洲一区二区| 亚洲第一在线视频| 欧美国产亚洲视频| 免费一级欧美片在线播放| 亚洲高清在线观看一区| 狼狼综合久久久久综合网| 久久9热精品视频| 国产综合色产在线精品| 久久青草欧美一区二区三区| 欧美一区二区久久久| 国产亚洲精品久久久久久| 香蕉久久夜色精品国产使用方法| 亚洲视频www| 国产伦精品一区二区三区免费| 久久xxxx| 久久嫩草精品久久久久| 亚洲高清资源综合久久精品| 亚洲第一精品久久忘忧草社区| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲性视频网址| 欧美特黄一级大片| 亚洲在线观看视频网站| 亚洲一级免费视频| 国产欧美va欧美不卡在线| 久久精品99国产精品| 欧美一区二区视频在线| 亚洲电影免费观看高清完整版在线| 欧美77777| 欧美日韩成人在线视频| 亚洲欧美在线看| 欧美一级在线播放| 亚洲国产成人在线播放| 夜夜嗨一区二区| 国产日韩欧美电影在线观看| 麻豆国产精品va在线观看不卡| 免费观看欧美在线视频的网站| 99国产精品视频免费观看| 亚洲欧美精品伊人久久| 亚洲国产女人aaa毛片在线| 99精品99| 亚洲国产精品激情在线观看| 夜夜爽99久久国产综合精品女不卡| 国产三级精品在线不卡| 亚洲电影激情视频网站| 国产精品毛片va一区二区三区| 久久夜色精品亚洲噜噜国产mv | 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲精品1区| 国产日韩欧美综合精品| 亚洲高清久久网| 国产精品专区一| 亚洲人成网站影音先锋播放| 国产一区二区三区久久久久久久久 | 久久激情综合网| 欧美丰满高潮xxxx喷水动漫| 欧美在线免费观看| 欧美日本国产| 欧美成人国产| 国产视频欧美视频| 99视频在线观看一区三区| 亚洲国产精品久久久久秋霞蜜臀| 亚洲综合精品自拍| 一区二区三区视频免费在线观看| 久久男人资源视频| 久久亚洲不卡| 合欧美一区二区三区| 午夜日韩在线| 亚洲欧洲精品一区二区三区| 久久久久一区二区| 亚洲自拍另类| 欧美日韩喷水| 亚洲国产精品va在线看黑人| 在线播放亚洲一区| 欧美伊人久久久久久午夜久久久久| 亚洲一区三区电影在线观看| 欧美国产一区在线| 亚洲丰满在线| 亚洲国产日韩欧美| 老色鬼久久亚洲一区二区| 久久综合伊人77777蜜臀| 合欧美一区二区三区| 久久久99精品免费观看不卡| 另类酷文…触手系列精品集v1小说| 国产香蕉97碰碰久久人人| 亚洲免费伊人电影在线观看av| 亚洲男女毛片无遮挡| 国产精品久久久一区麻豆最新章节| 一区二区三区.www| 欧美一区三区二区在线观看| 国产一区二区三区精品久久久| 久久精品女人| 男女激情视频一区| 亚洲看片一区| 欧美视频一区二区| 亚洲欧美国产日韩天堂区| 久久激情五月激情| 精品电影在线观看| 欧美黄色日本| 亚洲一区三区电影在线观看| 久久av一区二区三区| 在线日韩欧美视频| 欧美日韩精品欧美日韩精品一 | 久久精品国产2020观看福利| 国产在线成人| 欧美国产日韩一区| 亚洲影院色在线观看免费| 久久亚洲影音av资源网| 日韩视频在线观看| 国产精品视频一| 久久精品一区| 日韩视频在线观看免费| 久久精品视频免费| 日韩视频一区| 狠狠久久婷婷| 欧美性猛交xxxx乱大交退制版| 久久国产一区二区| 日韩视频在线观看国产| 久久资源av| 亚洲一区亚洲二区| 亚洲国产精品小视频| 国产精品夜夜夜| 欧美日韩国产精品自在自线| 性感少妇一区| 亚洲美女av网站| 麻豆国产精品777777在线| 亚洲一区二区免费在线| 在线精品观看| 国产精品h在线观看| 欧美成人免费小视频| 欧美一区二区三区视频在线 | 久久久久九九视频| 一本色道久久综合亚洲精品不 | 欧美成人日韩| 亚洲午夜一级| 亚洲精品色婷婷福利天堂| 国产一区999| 欧美视频一区二区三区| 噜噜噜噜噜久久久久久91| 亚洲免费影视| 国产精品99久久久久久久女警| 亚洲国产婷婷香蕉久久久久久| 久久久国产精品亚洲一区| 亚洲欧美日本伦理| 亚洲一二三四久久| 一本大道久久精品懂色aⅴ| 伊人久久成人| 一区二区三区在线视频观看| 国产日韩视频| 国产视频久久久久|