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

HarmonyOS JS應(yīng)用開發(fā)需要關(guān)注哪些線程?官方解析來啦

開發(fā) 前端 OpenHarmony
雖然使用JS語言目前無法直接創(chuàng)建新的Thread,但是HarmonyOS的JS UI框架提供了多線程的宿主環(huán)境,可以幫助應(yīng)用開發(fā)豐富的業(yè)務(wù)邏輯。

[[422403]]

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

HarmonyOS 2提供了對兩種開發(fā)語言的支持:Java和JavaScript(下文簡稱JS)。從事過Android開發(fā)的同學(xué)對Java都很熟悉了,其多線程特性能夠讓多任務(wù)并行執(zhí)行,充分利用硬件資源開發(fā)出高性能的應(yīng)用。在HarmonyOS 2上,JS目前無法像Java一樣直接創(chuàng)建新的Thread,那么使用JS語言開發(fā)HarmonyOS應(yīng)用是否會遇到硬件資源無法充分利用的情況呢?

雖然使用JS語言目前無法直接創(chuàng)建新的Thread,但是HarmonyOS的JS UI框架提供了多線程的宿主環(huán)境,可以幫助應(yīng)用開發(fā)豐富的業(yè)務(wù)邏輯。在開發(fā)HarmonyOS 2應(yīng)用時,開發(fā)者除了需要了解JS線程外,還需要關(guān)注哪些線程?這些線程之間的關(guān)系又是什么樣的?下面讓我們一起來研究一下。

一、HarmonyOS的JS UI框架

HarmonyOS的JS UI框架包括應(yīng)用層(Application)、前端框架層(Framework)、引擎層(Engine)和平臺適配層(Porting Layer),如下圖所示:

HarmonyOS JS應(yīng)用開發(fā)需要關(guān)注哪些線程?官方解析來啦~-鴻蒙HarmonyOS技術(shù)社區(qū)

Application

應(yīng)用層表示開發(fā)者使用JS UI框架開發(fā)的FA應(yīng)用,這里的FA應(yīng)用特指JS FA應(yīng)用。

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-js-fa-developing-0000001063300612

Framework

前端框架層主要完成前端頁面解析,以及提供MVVM(ModelViewViewModel)開發(fā)模式、頁面路由機制和自定義組件等能力。

Engine

引擎層主要提供動畫解析、DOM(Document Object Model)樹構(gòu)建、布局計算、渲染命令構(gòu)建與繪制、事件管理等能力。

Porting Layer

適配層主要完成對平臺層進(jìn)行抽象,提供抽象接口,可以對接到系統(tǒng)平臺。比如:事件對接、渲染管線對接和系統(tǒng)生命周期對接等。

二、JS UI框架的線程模型

每個HarmonyOS JS應(yīng)用,都是通過JS UI框架進(jìn)行加載渲染的。HarmonyOS的JS UI框架包含了JS線程、UI線程、GPU線程、IO線程這4個線程,并且在JS UI框架外還會存在一類后臺任務(wù)線程。

其中GPU線程與IO線程主要是JS UI框架初始化與頁面加載渲染的過程需要的,為JS UI框架內(nèi)部的專有線程,不會被應(yīng)用直接操作到,應(yīng)用不需要特別關(guān)注;UI線程、JS線程和后臺任務(wù)線程會與應(yīng)用開發(fā)代碼相關(guān),后面著重分析這三個線程的作用和關(guān)系。

UI線程: 負(fù)責(zé)應(yīng)用界面的繪制刷新,與應(yīng)用的進(jìn)程號相同,又叫主線程。如果開發(fā)JS+JAVA的混合編程(https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-fa-calls-pa-mechanism-0000001050022401 ),需要特別注意的是JAVA PA(Particle Ability)的onStart/onConnect等Ability生命周期回調(diào)便是運行在主線程,若在這些聲明周期回調(diào)上執(zhí)行耗時操作則會導(dǎo)致JS UI的繪制刷新卡住。

JS線程: 應(yīng)用的JS代碼會被JS引擎解析執(zhí)行,并運行在JS線程上,目前我們工程中看到的所有的JS代碼都會執(zhí)行在這個進(jìn)程下唯一的JS線程上。

后臺任務(wù)線程: 這是對JS UI框架外部的后臺線程的一個統(tǒng)稱,并不單指一個線程,也并不唯一。它包含了Java PA中onRemoteRequest()業(yè)務(wù)邏輯的執(zhí)行線程、文件操作API、網(wǎng)絡(luò)訪問API內(nèi)部實現(xiàn)等相關(guān)線程。

下面我們結(jié)合測試代碼的來看一下這3個應(yīng)用開發(fā)需要關(guān)注的線程之間的關(guān)系。

三、JS線程與UI線程的關(guān)系

為了驗證JS線程與UI線程的關(guān)系,我們準(zhǔn)備了一個實驗性質(zhì)的Demo,主要代碼以及運行過程的Log如下:

首先我們在IDE建立一個Empty Ability(JS)模板的HelloWorld工程,在生命周期、按鈕響應(yīng)回調(diào)方法里增加Log以觀察線程情況。剛創(chuàng)建的app.js中Application生命周期默認(rèn)已經(jīng)有Log,無需額外添加。

我們需要在自動創(chuàng)建的MainAbility.java中onStart/onTouchEvent回調(diào)函數(shù)增加HiLog打印:

  1. HiLog.info(LABEL_LOG, "MainAbility::onStart"); 
  2. HiLog.info(LABEL_LOG, "MainAbility::onTouchEvent"); 

 我們只需要在主界面index.js文件中onInit增加日志:

  1. console.info('page.default onInit'); 

然后在index.hml中增加一個button以及會一直進(jìn)行動畫的progress組件:

  1. <button id='button1' onclick="onButtonClick">I'm a button</button> 
  2. <progress type="circular"/> 

最后在index.js中增加按鈕點擊響應(yīng)事件以及Log,并且嘗試sleep阻塞js線程:

  1. function sleep(delay) { 
  2.         for (var t = Date.now(); Date.now() - t <= delay; ); 
  3. onButtonClick() { 
  4.         console.info('onButtonClick begin'); 
  5.         sleep(1000); 
  6.         console.info('onButtonClick end'); 

我們將應(yīng)用運行起來,點擊一次按鈕,會發(fā)現(xiàn)progress組件動畫并不會因為onButtonClick阻塞了1秒鐘而有任何暫停,我們一起來分析一下這個過程中的Log:

  1. 15:30:07.323 15870-15870/com.blancwu.test I 01100/MainAbility: MainAbility::onStart 
  2. 15:30:07.342 15870-18938/com.blancwu.test I 03B00/JSApp: app Log:  AceApplication onCreate 
  3. 15:30:07.352 15870-18938/com.blancwu.test I 03B00/JSApp: app Log:  page.default onInit 
  4. 15:30:31.006 15870-15870/com.blancwu.test I 01100/MainAbility: MainAbility::onTouchEvent 
  5. 15:30:31.041 15870-15870/com.blancwu.test I 01100/MainAbility: MainAbility::onTouchEvent 
  6. 15:30:31.104 15870-15870/com.blancwu.test I 01100/MainAbility: MainAbility::onTouchEvent 
  7. 15:30:31.106 15870-15870/com.blancwu.test I 01100/MainAbility: MainAbility::onTouchEvent 
  8. 15:30:31.112 15870-18938/com.blancwu.test I 03B00/JSApp: app Log:  onButtonClick begin 
  9. 15:30:32.113 15870-18938/com.blancwu.test I 03B00/JSApp: app Log:  onButtonClick end 

 從輸出的Log中,時間點后面跟著的便是我們執(zhí)行日志的代碼行所在的進(jìn)程號與線程號,剛才我們增加的日志均在15870這個進(jìn)程下,這個進(jìn)程下又存在15870線程以及18938線程。其中15870與進(jìn)程號相同,這便是我們說的UI線程;我們在.js文件中增加的日志全都會在18938線程上打印出來,這個便是JS線程。

HarmonyOS JS應(yīng)用開發(fā)需要關(guān)注哪些線程?官方解析來啦~-鴻蒙HarmonyOS技術(shù)社區(qū)

在應(yīng)用初始化時,首先進(jìn)入MainAbility.java的onStart生命周期回調(diào),然后才進(jìn)入AceApplication、Page等JS代碼邏輯;應(yīng)用初始化完畢后,UI線程上便會持續(xù)刷新progress組件的動畫,當(dāng)用戶點擊按鈕觸發(fā)onButtonClick阻塞1秒時,因為阻塞的僅僅是JS線程,所以UI線程上progress組件的動畫刷新并不會有任何影響,還是在持續(xù)刷新。所以我們可以確定JS線程與UI線程的相互調(diào)用應(yīng)該是通過某種消息機制完成的,而不是阻塞式的調(diào)用。

四、JS線程與后臺任務(wù)線程的關(guān)系

JS UI框架提供了JS FA(Feature Ability)調(diào)用Java PA(Particle Ability)的機制,該機制提供了一種通道來傳遞方法調(diào)用、處理數(shù)據(jù)返回以及訂閱事件上報的機制,Java PA運行在一個獨立的后臺任務(wù)線程,可以支撐應(yīng)用開發(fā)多線程的業(yè)務(wù)邏輯。我們同樣制作一個Demo來驗證JS線程與Java PA線程的關(guān)系:

在上一個Demo基礎(chǔ)上,我們修改onButtonClick的JS代碼,通過FeatureAbility.callAbility拉起并調(diào)用了名為一個類名為ServiceAbility的Java PA,并拿到返回結(jié)果:

  1. var action = {}; 
  2. action.bundleName = 'com.blancwu.test'
  3. action.abilityName = 'com.blancwu.test.ServiceAbility'
  4. action.messageCode = 1001; 
  5. action.abilityType = 0; 
  6. action.syncOption = 0; 
  7. console.info('FeatureAbility.callAbility begin' + JSON.stringify(action)); 
  8. FeatureAbility.callAbility(action).then(function (value) { 
  9.     console.info('FeatureAbility.callAbility async result ' + JSON.stringify(value)); 
  10. }) 
  11. console.info('FeatureAbility.callAbility end' + JSON.stringify(action)); 

 在ServiceAbility的onRemoteRequest中增加Log輸出,并sleep 1秒種,以便觀察線程情況與之間關(guān)系:

  1. @Override 
  2. public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) throws RemoteException { 
  3.     HiLog.info(LABEL_LOG, "onRemoteRequest begin " + code); 
  4.     if (code == 1001) { 
  5.         try { 
  6.             Thread.sleep(1000); 
  7.         } catch (InterruptedException e) { 
  8.             e.printStackTrace(); 
  9.         } 
  10.         Map<String, Object> result = new HashMap<String, Object>(); 
  11.         result.put("result", 1); 
  12.         reply.writeString(ZSONObject.toZSONString(result)); 
  13.     } 
  14.     HiLog.info(LABEL_LOG, "onRemoteRequest end " + code); 
  15.     return super.onRemoteRequest(code, data, reply, option); 

 以上代碼完成后,我們進(jìn)行執(zhí)行,progress組件的動畫同樣不會被打斷,得到的Log如下:

  1. 06-25 13:31:48.090 4133-5887/com.blancwu.test I 03B00/JSApp: app Log:  FeatureAbility.callAbility begin{"bundleName":"com.blancwu.test","abilityName":"com.blancwu.test.ServiceAbility","messageCode":1001,"abilityType":0,"syncOption":0} 
  2. 06-25 13:31:48.094 4133-5887/com.blancwu.test I 03B00/JSApp: app Log:  FeatureAbility.callAbility end{"bundleName":"com.blancwu.test","abilityName":"com.blancwu.test.ServiceAbility","messageCode":1001,"abilityType":0,"syncOption":0} 
  3. 06-25 13:31:48.112 4133-4133/com.blancwu.test E 01100/ServiceAbility: [8187916a4418bed, 399b373, f521b3] ServiceAbility::onStart 
  4. 06-25 13:31:48.126 4133-5837/com.blancwu.test I 01100/ServiceAbility: [8187916a4418bed, 171378f, 385abb1] onRemoteRequest begin 1079135572 
  5. 06-25 13:31:48.126 4133-5837/com.blancwu.test I 01100/ServiceAbility: [8187916a4418bed, 171378f, 385abb1] onRemoteRequest end 1079135572 
  6. 06-25 13:31:48.126 4133-5837/com.blancwu.test I 00000/RemoteObject: [8187916a4418bed, 171378f, 385abb1] Java onRemoteRequest called 
  7. 06-25 13:31:48.143 4133-5837/com.blancwu.test I 01100/ServiceAbility: onRemoteRequest begin 1001 
  8. 06-25 13:31:49.145 4133-5837/com.blancwu.test I 01100/ServiceAbility: onRemoteRequest end 1001 
  9. 06-25 13:31:49.145 4133-5837/com.blancwu.test I 00000/RemoteObject: Java onRemoteRequest called 
  10. 06-25 13:31:49.151 4133-5887/com.blancwu.test I 03B00/JSApp: app Log:  FeatureAbility.callAbility async result "{\"result\":1}" 

 整個執(zhí)行過程可以描述如下圖:

HarmonyOS JS應(yīng)用開發(fā)需要關(guān)注哪些線程?官方解析來啦~-鴻蒙HarmonyOS技術(shù)社區(qū)

我們觀察到本次運行主進(jìn)程(UI線程)號為4133,JS代碼執(zhí)行在JS線程(5887),Java PA響應(yīng)onRemoteRequest執(zhí)行在另一個后臺任務(wù)線程(5837)。通過Log我們看到onRemoteRequst即使阻塞了后臺任務(wù)線程1s也不會影響JS線程的執(zhí)行以及主線程(UI線程)上動畫的刷新,做到了JS線程與后臺任務(wù)線程上的任務(wù)并行處理。

五、JS的異步機制

上面從代碼實驗角度觀察到了應(yīng)用開發(fā)中JS線程與其他線程的關(guān)系,那么JS線程是怎么與其他線程進(jìn)行異步通信的呢?我們先來看一下傳統(tǒng)的瀏覽器環(huán)境下的機制:

HarmonyOS JS應(yīng)用開發(fā)需要關(guān)注哪些線程?官方解析來啦~-鴻蒙HarmonyOS技術(shù)社區(qū)

上圖中,JS線程中的函數(shù)調(diào)用會存在于棧(stack)中,棧中的函數(shù)可以調(diào)用瀏覽器環(huán)境提供的WebAPIs,包含了DOM、ajax、timeout等API,這些API會在瀏覽器環(huán)境提供的另外一個外部線程執(zhí)行,執(zhí)行完成后會在任務(wù)隊列(callback queue)中加入對應(yīng)的回調(diào)事件(如onClick、onLoad、onDone)。當(dāng)棧中的代碼執(zhí)行完畢,即棧清空后,JS線程又會通過event loop取出任務(wù)隊列中的下一個任務(wù)進(jìn)行執(zhí)行,以此類推完成整個的程序執(zhí)行。更具體的機制可以去看阮一峰老師介紹JS EventLoop的文章。

● JS EventLoop的介紹

http://www.ruanyifeng.com/blog/2014/10/eventloop.html

HarmonyOS的JS UI框架同樣遵循上述最基本的EventLoop調(diào)度機制,并且提供了更多的機制和API,讓業(yè)務(wù)邏輯可以在外部線程執(zhí)行;包括上面提到的Java PA機制以及還未提及的支持異步回調(diào)的系統(tǒng)能力API。其中,支持異步回調(diào)的系統(tǒng)能力API包含文件系統(tǒng)操作和網(wǎng)絡(luò)操作等,感興趣的同學(xué)可以按照我們實驗Demo類似的方法去嘗試一下。

● 文件系統(tǒng)操作API參考

https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-file-storage-0000000000629445

六、未來展望

目前HarmonyOS的JS應(yīng)用內(nèi)實現(xiàn)多線程的最佳方式是通過混合編程調(diào)用Java PA方式,但無法支持純JS應(yīng)用開發(fā)多線程業(yè)務(wù),純JS應(yīng)用目前僅可使用框架提供的異步API了,那么這些異步API能解決各種復(fù)雜場景的問題嗎?

JS線程加上異步API能夠很好解決單個I/O阻塞的問題,但是如果遇到大量的I/O事件,比如批刪除大量文件,通過for循環(huán)發(fā)起了大量異步任務(wù),也會降低執(zhí)行效率,甚至阻塞其他異步任務(wù)的執(zhí)行。并且如果要使用JS語言開發(fā)計算密集型的任務(wù),也無法在唯一的JS線程上進(jìn)行。

這時就需要一個真正的JS多線程處理機制了,雖然目前HarmonyOS 2還未支持,但未來HarmonyOS會考慮規(guī)劃出與HTML5類似提供支持WebWorker機制,支持開發(fā)出多線程的JS代碼,提供給應(yīng)用開發(fā)者更多的發(fā)揮空間。

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-08-31 15:00:26

鴻蒙HarmonyOS應(yīng)用

2024-11-05 16:45:02

2021-01-18 09:43:58

Node.js前端服務(wù)端

2021-06-25 15:09:36

攻防演練

2021-06-25 15:04:31

鴻蒙HarmonyOS應(yīng)用

2013-12-12 13:37:04

iOS 7開發(fā)

2024-06-12 09:23:37

2016-08-11 17:34:25

企業(yè) 應(yīng)用

2022-08-09 16:01:24

應(yīng)用開發(fā)鴻蒙

2020-03-03 09:00:00

API

2023-10-10 06:57:32

2024-11-18 00:22:34

2022-01-11 09:00:00

開發(fā)工具遠(yuǎn)程工作

2020-11-09 11:56:49

HarmonyOS

2021-09-24 10:20:42

鴻蒙HarmonyOS應(yīng)用

2021-04-23 16:08:08

鴻蒙HarmonyOS應(yīng)用

2009-08-11 15:05:55

云應(yīng)用開發(fā)思維

2024-01-02 14:06:00

2020-09-28 15:13:04

鴻蒙

2020-12-28 11:11:26

前端開發(fā)語言
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲最大福利网| 亚洲毛片在线免费观看| 亚洲综合五月天| 国产精品毛片久久久久久久av| 亚洲综合中文| 亚洲成人精品视频| 精品免费国产一区二区| 国内精品久久久久久野外| 国产99久久久国产精品免费看 | 在线激情小视频| 久久99精品久久久久久国产越南| 欧美黑人一级爽快片淫片高清| 亚洲中文字幕一区| 久久国内精品| 午夜精品一区在线观看| 亚洲欧美丝袜| 天堂在线观看免费视频| 美腿丝袜亚洲一区| 国内久久久精品| 超碰人人人人人人人| 超碰精品在线观看| 欧美日韩亚洲综合在线| 九色自拍视频在线观看| 在线视频1区2区| 99精品久久99久久久久| 国产日韩欧美中文| 中文字幕视频网| 欧美激情综合| 日韩在线视频观看正片免费网站| 激情综合丁香五月| 深夜激情久久| 欧美美女一区二区在线观看| 99国产精品久久久久| 亚洲片国产一区一级在线观看| 国产性生活一级片| 视频在线日韩| 午夜精品久久久久久久| 中文字幕乱码免费| 91精品专区| 久久久美女毛片| 国产乱码精品一区二区三区卡| 91午夜交换视频| 日韩国产欧美在线播放| 91成人在线播放| 国产午夜精品无码一区二区| 在线精品小视频| 日韩在线观看免费网站| 成人无码av片在线观看| 亚洲aa在线| 亚洲第一色在线| 五月婷婷六月丁香激情| 四虎4545www国产精品| 欧美日韩中文字幕综合视频| 免费一级特黄毛片| 欧美性video| 亚洲一区免费观看| 波多野结衣av一区二区全免费观看| 免费的黄网站在线观看| 国产精品久线观看视频| 宅男在线精品国产免费观看| 香蕉视频在线免费看| 国产蜜臀av在线一区二区三区| 欧洲亚洲一区二区三区四区五区| 九色在线视频| 国产亚洲美州欧州综合国| 欧美日韩最好看的视频| 二区在线视频| 国产精品福利在线播放| 一区二区三区三区在线| 成人高清免费在线| 亚洲精品免费在线| 老子影院午夜伦不卡大全| 国产高清在线a视频大全| 亚洲成a人v欧美综合天堂| 黄页网站大全在线观看| 成人动漫一区| 欧美性受极品xxxx喷水| 粉色视频免费看| 日韩高清在线观看一区二区| 亚洲国产精品久久久久久| 亚洲第九十七页| av一区二区在线观看| 久久亚洲综合国产精品99麻豆精品福利| 国产一二三四区| 91久久亚洲| 国产91在线播放九色快色| 中文字幕一区二区三区波野结| 国产毛片一区二区| 精品日产一区2区三区黄免费| 久久综合九色综合久| 欧美韩国一区二区| 特级西西人体www高清大胆| av中文资源在线资源免费观看| 色一情一乱一乱一91av| www.污污视频| 国产精品一区二区三区美女| 亚洲最新av网址| 青青青在线免费观看| 伊人久久久大香线蕉综合直播| 国产成人鲁鲁免费视频a| 国产精品嫩草影院精东| 99久久精品国产观看| 日韩资源av在线| 在线你懂的视频| 福利视频导航一区| 999久久久精品视频| 久久超级碰碰| 久久精品视频免费播放| 69视频免费在线观看| 国产一区 二区 三区一级| 蜜桃999成人看片在线观看| 久操免费在线| 色狠狠一区二区三区香蕉| 欧美一区二区三区影院| 精品国产不卡| 8x海外华人永久免费日韩内陆视频| 国产精品无码久久av| 久久久亚洲国产美女国产盗摄| 蜜桃网站在线观看| 日本在线一区二区| 亚洲欧美中文日韩v在线观看| 国产亚洲精品久久久久久打不开| 蜜桃传媒麻豆第一区在线观看| 精品网站在线看| 中中文字幕av在线| 欧美人与z0zoxxxx视频| 亚洲码无人客一区二区三区| 亚洲欧洲一区| 99精品国产高清一区二区| 日本三级在线播放完整版| 色噜噜狠狠一区二区三区果冻| 日本黄色录像片| 欧美特黄一级| 91在线精品视频| 成年女人的天堂在线| 一本一道久久a久久精品| 国产十八熟妇av成人一区| 这里只有精品在线| 91精品久久久久久| 在线免费观看黄色网址| 欧美午夜精品电影| 人人人妻人人澡人人爽欧美一区| 中日韩男男gay无套| 翡翠波斯猫1977年美国| 人交獸av完整版在线观看| 欧美一区二区日韩| 五月天激情丁香| 久久99久久99| 成年人黄色在线观看| 自拍偷拍欧美日韩| 久久九九全国免费精品观看| 91丨九色丨丰满| 亚洲欧美另类久久久精品| 999热精品视频| 综合久久99| 99精品国产一区二区| 欧美日韩经典丝袜| 精品久久一二三区| 国产精品免费av一区二区| fc2成人免费人成在线观看播放| 国产自产在线视频| 久久久伦理片| 欧美在线播放视频| 国产免费永久在线观看| 欧美综合在线视频| 羞羞在线观看视频| 国内精品第一页| 黄色三级中文字幕| 红杏一区二区三区| 欧美在线一级视频| 99青草视频在线播放视| 欧美久久久影院| 妺妺窝人体色www聚色窝仙踪| 成人av午夜电影| 久久无码高潮喷水| 成人免费在线观看av| 成人国产精品久久久| 亚洲无线看天堂av| 亚洲激情视频在线观看| 天天爱天天做天天爽| 国产精品乱码一区二三区小蝌蚪| 国产一级免费大片| 亚洲免费精品| 亚洲精品高清国产一线久久| 麻豆视频久久| 欧美一级片一区| 五月香视频在线观看| 精品国产乱码久久久久久图片 | 秋霞视频一区二区| 在线视频一区二区三| 中文字幕电影av| 99r国产精品| 亚洲福利精品视频| 欧美日韩免费| 日本欧洲国产一区二区| 国产精品久久久久久av公交车 | 成人激情综合| 超碰精品一区二区三区乱码| 台湾av在线二三区观看| 91精品国产欧美一区二区成人 | 亚洲精品婷婷| 三年中文高清在线观看第6集 | 神马欧美一区二区| 99re8这里有精品热视频8在线| 国产精品pans私拍| 里番在线播放| 中文字幕欧美日韩va免费视频| www.com欧美| 欧美午夜精品一区二区蜜桃 | 在线精品亚洲一区二区不卡| 欧美精品一级片| 欧美激情中文字幕| 国产又粗又猛又色| 激情另类小说区图片区视频区| 欧美日韩在线中文| 欧美网站在线| 中国成人亚色综合网站| 伊人精品一区| 国产在线欧美日韩| 91国内精品| 亚洲www视频| 欧美男女视频| 久久天堂精品| 91在线免费视频| 日韩另类视频| 91黑丝高跟在线| 欧美人与牲禽动交com | 国产精品国产精品| 日韩免费在线电影| 国产黑人绿帽在线第一区| 老司机深夜福利在线观看| 欧美国产第一页| 成人在线免费看黄| 中文字幕日本欧美| 国产福利片在线| 亚洲欧美日韩成人| 日韩在线视频第一页| 日韩欧美一区中文| 国产日韩在线观看一区| 欧美日韩国产在线观看| 久久久精品毛片| 色婷婷综合视频在线观看| 日韩av大片在线观看| 午夜精品免费在线| 精品在线视频观看| 亚洲制服丝袜av| 久久久久国产精品夜夜夜夜夜| 亚洲精品成人悠悠色影视| 亚洲av无码一区二区三区在线| 国产精品国产三级国产aⅴ无密码| 日韩丰满少妇无码内射| 久久九九久久九九| 最近中文字幕免费视频| 久久青草欧美一区二区三区| 中文字幕一区二区久久人妻网站| 99re66热这里只有精品3直播| 精品久久久久一区二区| 9人人澡人人爽人人精品| 日本黄色动态图| 成人99免费视频| 久久人人妻人人人人妻性色av| 日本电影全部在线观看网站视频 | 国产精品6666| 亚洲成av人片一区二区| 日本少妇裸体做爰| 懂色av中文一区二区三区天美| 超碰超碰超碰超碰| 91极品视觉盛宴| 一级黄色片在线看| 日韩一级高清毛片| 空姐吹箫视频大全| 亚洲乱码国产乱码精品精天堂| 第一页在线观看| www日韩中文字幕在线看| 18视频在线观看| 国内精品久久久久久中文字幕| 三级中文字幕在线观看| 国产精品999999| 欧美天堂一区二区| www 成人av com| 特黄特色欧美大片| 婷婷久久青草热一区二区| 婷婷综合视频| 免费观看美女裸体网站| 三级一区在线视频先锋| 亚洲精品第三页| 激情成人综合| 能在线观看的av网站| 国产一区在线视频| 喷水视频在线观看| 国产精品国产三级国产aⅴ入口| 精品少妇爆乳无码av无码专区| 色偷偷一区二区三区| 精品久久久久成人码免费动漫| 日韩经典中文字幕| 快射av在线播放一区| 91精品国产91久久| 日本免费一区二区三区等视频| 国产精品果冻传媒潘| 狠狠色丁香婷婷综合影院| 日本道在线视频| 免费在线观看成人av| 欧美性猛交xxxx乱大交91| 久久一区二区三区国产精品| 欧美黄色aaa| 91高清视频在线| 亚洲精品国产一区二| 在线视频日本亚洲性| missav|免费高清av在线看| 国产精品久久久久久久久| 国产精品流白浆在线观看| 亚洲一区二区三区午夜| aⅴ色国产欧美| 手机看片国产精品| 日本一区二区三区在线观看| 日本三级网站在线观看| 337p亚洲精品色噜噜| 免费看黄色aaaaaa 片| 日产精品一区二区| 精品人妻少妇一区二区| 久久丁香综合五月国产三级网站| 中国一级特黄录像播放| 亚洲六月丁香色婷婷综合久久| 国产成人麻豆免费观看| 亚洲精品98久久久久久中文字幕| 成人短视频在线观看| 国产精品久久在线观看| 综合国产视频| 毛片在线播放视频| 国产乱码精品一区二区三区五月婷| 国产1区2区在线观看| 日韩欧美在线视频日韩欧美在线视频| 国内精品久久久久久久久久久 | 亚洲国产国产亚洲一二三| 极品粉嫩美女露脸啪啪| 国产精品视频观看| 日韩黄色一级视频| 亚洲女成人图区| 麻豆网站免费在线观看| 韩国成人av| 1024日韩| 91黄色免费视频| 亚洲成av人片观看| 少妇高潮一区二区三区69| 久久国产精品99国产精| 午夜精品久久久久久毛片| 杨幂一区欧美专区| 美女免费视频一区二区| 人人爽人人爽人人片| 欧美最猛性xxxxx直播| 99精品老司机免费视频| 国产日韩欧美夫妻视频在线观看| 大片网站久久| 五月婷婷六月丁香激情| 亚洲视频中文字幕| 国产伦精品一区二区三区视频痴汉| 久久精品视频va| 视频一区国产| 中文字幕无码精品亚洲资源网久久| 成人白浆超碰人人人人| 日韩免费在线视频观看| 日韩精品免费看| 91福利区在线观看| 麻豆91蜜桃| 日本在线观看不卡视频| 国产精品69久久久久孕妇欧美| 欧美日韩国产片| av色综合久久天堂av色综合在| 99视频日韩| 国产日韩欧美三级| 人妻精品久久久久中文| 欧美美女喷水视频| 羞羞视频在线免费国产| 精品在线观看一区二区| 日韩精品一级中文字幕精品视频免费观看 | 久久久精品国产sm调教| 亚洲国产天堂久久综合| 日韩免费电影| 国产又粗又爽又黄的视频 | 日韩精品卡通动漫网站| 久久草av在线| 999久久久国产| 日韩一区二区电影网| 国产精品电影| 日韩av一级大片| 国产精选一区二区三区| 成年人午夜视频| 中文字幕久热精品视频在线| 日韩三级网址| 97xxxxx| 国产欧美综合在线| 99精品久久久久久中文字幕| 91精品国产777在线观看| 日韩成人影院| 国产乱淫av麻豆国产免费| 色综合久久88色综合天天免费| 免费人成在线观看播放视频| 国内精品**久久毛片app| 美女性感视频久久| 精品一区免费观看|