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

JS UI框架下FA與PA是如何交互的

開發
本文介紹了JS FA(Feature Ability)調用JAVA PA(Particle Ability)的機制和使用場景,基于JS UI框架開發的應用可以使用該機制完成更豐富的功能。

[[411492]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

上一篇“HarmonyOS UI框架關鍵技術解析”中,給大家介紹了基于JS/JAVA UI框架開發簡單業務的方法。那么對于復雜業務,在當前HarmonyOS版本下,如何基于JS UI框架來開發呢?

JS UI框架下FA與PA交互的使用場景

通常一個典型使用JS UI框架的HarmonyOS應用開發模型如下圖1所示:

JS UI框架下FA與PA是如何交互的-鴻蒙HarmonyOS技術社區

圖1 典型應用開發模型

HarmonyOS的用戶應用程序包APP由一個或多個Hap包組成。每個Hap可以包含一個或多個Ability。Ability分為兩種類型:Feature Ability(簡稱FA)和Particle Ability(簡稱PA),FA和PA是HarmonyOS應用的基本組成單元,能夠實現特定的業務功能。FA有UI界面,而PA無UI界面。FA有多種展現形式,如普通界面形式Page Ability,服務卡片形式Form等,一般使用JS 語言實現前臺界面。PA支持ServiceAbility和Data Ability。ServiceAbility提供后臺運行任務的能力,如處理復雜后臺任務等。Data Ability用于對外部提供統一的數據訪問抽象。這兩個Ability一般使用Java 語言實現。

當前HarmonyOS Ability具體分類信息如下:

JS UI框架下FA與PA是如何交互的-鴻蒙HarmonyOS技術社區

JS UI框架提供的聲明式編程,使應用開發更加簡單,但當前HarmonyOS JS API還不夠豐富,無法處理數據等更復雜的業務。為了達到處理復雜業務,同時保證業務數據和UI的解耦,一般會將復雜邏輯放到PA中即JAVA端實現,而界面交互則放到FA中的UI部分即JS端實現,如圖1所示。

這就涉及到FA(JS端)與PA(JAVA端)的交互,為此,Harmony OS JS UI框架提供了JS FA(Feature Ability)調用JAVA PA(Particle Ability)的機制,該機制提供了一種通道來傳遞方法調用、處理數據返回以及訂閱事件上報。

下面我們通過一兩個例子來解釋該方法涉及的技術原理。

HarmonyOS下FA調用PA機制

接口拓展機制

為支持ACE開發框架一次開發,跨平臺運行的目標,采用了接口拓展機制打通前端應用層和后端平臺層。JS UI框架提供了一種自動封裝平臺能力擴展API的機制,讓應用開發者輕松調用API即能完成JS端到JAVA端的傳遞方法調用、處理數據返回以及訂閱事件上報。

JS UI框架下FA與PA是如何交互的-鴻蒙HarmonyOS技術社區

圖2 模塊框架模型

如圖2所示,當前HarmonyOS支持JS作為前端應用開發語言,提供API接口,供開發者實現業務邏輯,通過類似接口拓展機制將JS層的參數傳遞到平臺層(Native),同時在平臺層提供插件代碼(Plugin Native code)供三方平臺實現業務邏輯。

 JS FrameWork

提供API用于傳遞方法調用,數據流通信,以及訂閱事件回調。并通過JsBridge橋接起C++ 與JS,JsBridge主要負責加載JS代碼,運行在QJS Engine上,將JS代碼通過全局函數橋接到C++ 上,并將C++的結果返回給JS層。

 QJS Engine

QuickJS 是一個輕量且可嵌入的 JavaScript 引擎,包括模塊、異步生成器和代理。

 ACE Framework

將JS的消息往平臺層透傳,將JS數據轉換成C++ 類型的數據,再通過C++ 與JAVA的JNI接口類,將C++的數據傳遞到JAVA側,并接收JAVA側返回的數據。

 Native

負責平臺層數據編解碼,并根據解碼后得到的FunctionName調用第三方開發者的插件代碼邏輯。

 HarmonyOS API

平臺層提供JAVA端API接口。開發者實現JAVA端對應接口的業務邏輯。

HarmonyOS下FA調用PA機制

JS UI框架當前提供了Ability和Internal Ability兩種FA調用PA的方式:

  •  Ability調用方式:擁有獨立的Ability生命周期,FA使用遠端進程通信拉起并請求PA服務,適用于基本服務PA有多個FA調用或者PA在后臺獨立運行的場景。
  •  Internal Ability調用方式:PA與FA共進程,PA和FA采用內部函數調用的方式進行通信,適用于對服務響應時延要求較高的場景。該方式下PA不支持其他FA訪問調用。

這兩種調用方式在代碼中可通過abilityType來標識,具體使用差異見下表:

JS UI框架下FA與PA是如何交互的-鴻蒙HarmonyOS技術社區

FA調用PA注意事項:

  •  JS和JAVA側定義好的“方法調用”在對外開放后,需要保證前向兼容性。
  •  序列化數據默認最大支持200KB數據量,若需要傳輸大數據,可以使用對應接口ohos.utils.Parcel.setCapacity()調整buffer容量大小。

FA調用PA開發方法

下面來給大家詳細介紹JS FA調用JAVA PA的開發方法。

JS UI框架下FA與PA是如何交互的-鴻蒙HarmonyOS技術社區

圖3 FA調用PA開發方法

如圖3所示,當FeatureAbility Plugin收到JS調用請求后,系統根據開發者在JS接口中設置的參數如指定的abilityType(Ability或Internal Ability),來選擇對應的方式進行處理。開發者在onRemoteRequest()中實現PA提供的業務邏輯,不同的業務通過業務碼來區分。

 FA端

1.Channel JS API提供以下模塊能力:

  •  ModuleGroup

用于傳遞方法調用的類,通常用于上層應用者調用native中的某個方法而定義使用。調用callNative()方法即可將function以及對應的參數傳遞到平臺層,需要在Native層也適配相應的邏輯代碼。

簡言之,即ModuleGroup實現JS調用JAVA方法,提供的JS API如下:

√ 調用PA能力,FeatureAbility.callAbility(OBJECT)

  •  EventGroup

用于數據流通信,通常用于平臺層觸發的Native事件通知應用層。在應用層調用subscribe()方法注冊回調事件啟動監聽平臺,調用unSubscribe()取消平臺監聽。第三方開發者在平臺層需要適配相應的邏輯代碼。

簡言之,即EventGroup實現JAVA回調JS,提供的JS API如下:

  • 訂閱PA能力,FeatureAbility.subscribeAbilityEvent(OBJECT, Function)
  •  取消訂閱PA能力,FeatureAbility.unsubscribeAbilityEvent(OBJECT)

2.FeatureAbility Plugin

主要完成方法調用、數據流的參數傳遞(編解碼)、線程切換、JNI轉換等處理。

其主要提供以下2個重點模塊:

  •  Internal Ability Manager

用于Internal Ability的管理,包括注冊管理等,注冊后的Internal Ability與FA共生命周期。

  •  Connection Manager

JS端與JAVA端通過接口擴展機制進行通信,通過bundleName和abilityName來進行關聯。

 PA端

PA端提供以下兩類接口:

  •  IRemoteObject.onRemoteRequest(int, MessageParcel, MessageParcel, MessageOption)

Ability調用方式,FA使用遠端進程通信拉起并請求PA服務。

  •  AceInternalAbility.AceInternalAbilityHandler.onRemoteRequest(int, MessageParcel, MessageParcel, MessageOption)

Internal Ability調用方式,采用內部函數調用的方式和FA進行通信。

Ability調用方式流程

JS UI框架下FA與PA是如何交互的-鴻蒙HarmonyOS技術社區

圖4 JS FA調用JAVA PA過程(Ability方式)

1.FA JS端指定PA的調用方式及相關消息碼和內容,調用PA(訂閱PA類似)。設置bundleName,abilityName,abilityType等。

2.PA JAVA端響應:

通過Ability方式拉起的PA繼承自Ability,FA在請求PA服務時會連接到PA,連接成功后,PA在onConnect返回一個remote對象(RemoteObject),用于FA向PA發送消息。remote對象實現onRemoteRequest方法,用于響應FA端的請求。

示例代碼如下:e.g.兩數求和

 FA端 (Ability方式)

  1. // abilityType: 0-Ability; 1-Internal Ability 
  2. const ABILITY_TYPE_EXTERNAL = 0; 
  3. const ABILITY_TYPE_INTERNAL = 1; 
  4. // syncOption(Optional, default sync): 0-Sync; 1-Async 
  5. const ACTION_SYNC = 0; 
  6. const ACTION_ASYNC = 1; 
  7. const ACTION_MESSAGE_CODE_PLUS = 1001; 
  8. export default {   
  9.   plus: async function() {     
  10.     var actionData = {};     
  11.     actionData.firstNum = 1024;     
  12.     actionData.secondNum = 2048; 
  13.      
  14.     // 請求參數,abilityName、bundleName、messageCode、abilityType、actionData需要求和的2個入參     
  15.     var action = {};     
  16.     action.bundleName = 'com.example.hiaceservice';     
  17.     action.abilityName = 'com.example.hiaceservice.ComputeServiceAbility';     
  18.     action.messageCode = ACTION_MESSAGE_CODE_PLUS; 
  19.     action.data = actionData; 
  20.     // 使用ability方式     
  21.     action.abilityType = ABILITY_TYPE_EXTERNAL;     
  22.     action.syncOption = ACTION_SYNC; 
  23.      
  24.     // FA調用PA     
  25.     var result = await FeatureAbility.callAbility(action);     
  26.     var ret = JSON.parse(result);     
  27.     if (ret.code == 0) {       
  28.       console.info('plus result is:' + JSON.stringify(ret.abilityResult));     
  29.     } else {       
  30.       console.error('plus error code:' + JSON.stringify(ret.code)); 
  31.     }   
  32.   } 

PA端(Ability方式)

  1. public class ComputeServiceAbility extends Ability {   
  2.   private MyRemote remote = new MyRemote();   
  3.   // FA在請求PA服務時會連接PA,連接成功后,需要在onConnect返回一個remote對象,供FA向PA發送消息   
  4.   @Override   
  5.   protected IRemoteObject onConnect(Intent intent) {     
  6.     super.onConnect(intent);     
  7.     return remote.asObject();   
  8.   } 
  9.   // remote對象的實現,完成消息請求處理,回傳   
  10.   class MyRemote extends RemoteObject implements IRemoteBroker {     
  11.     private static final int SUCCESS = 0;     
  12.     private static final int ERROR = 1;     
  13.     private static final int PLUS = 1001;        
  14.      
  15.     MyRemote() {       
  16.       super("MyService_MyRemote");     
  17.     }     
  18.     @Override     
  19.     public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) {       
  20.       switch (code) { 
  21.       // 消息碼PLUS         
  22.       case PLUS: { 
  23.         // 消息參數解析           
  24.         String dataStr = data.readString();           
  25.         RequestParam param = new RequestParam();           
  26.         try {                   
  27.           param = ZSONObject.stringToClass(dataStr, RequestParam.class);           
  28.         } catch (RuntimeException e) { 
  29.           HiLog.error(LABEL, "convert failed.");           
  30.         }           
  31.          
  32.         // 返回結果設置           
  33.         Map<String, Object> result = new HashMap<String, Object>();           
  34.         result.put("code", SUCCESS);           
  35.         result.put("abilityResult", param.getFirstNum() + param.getSecondNum());           
  36.         // 返回結果回傳           
  37.         reply.writeString(ZSONObject.toZSONString(result));           
  38.         break;         
  39.       }         
  40.       default: {           
  41.         Map<String, Object> result = new HashMap<String, Object>(); 
  42.         result.put("abilityError", ERROR);           
  43.         reply.writeString(ZSONObject.toZSONString(result));           
  44.         return false;         
  45.       }       
  46.     }       
  47.     return true;     
  48.   }     
  49.   @Override     
  50.   public IRemoteObject asObject() {       
  51.      return this;     
  52.    }  
  53.   } 

Internal Ability調用方式流程

JS UI框架下FA與PA是如何交互的-鴻蒙HarmonyOS技術社區

圖5 JS FA調用JAVA PA過程(Internal Ability方式)

1.FA JS端指定PA的調用方式及相關消息碼和內容,調用PA(訂閱PA類似)。設置bundleName,abilityName,abilityType等。

2. PA JAVA端響應:

通過Internal Ability方式拉起的PA需要繼承自AceInternalAbility,且需要在AceAbility中注冊該Internal Ability(AceAbility中執行register方法)。

PA中通過setInternalAbilityHandler方法注冊onRemoteRequest方法,用于響應FA端的請求。

示例代碼如下:e.g.兩數求和

FA端(Internal Ability方式)

和使用ability方式代碼類似,區別是需要改變方式類型為Internal Ability:

action.abilityType = ABILITY_TYPE_INTERNAL;

 PA端(Internal Ability方式):

  1. //Internal Ability注冊:在MainAbility注冊 
  2. public class MainAbility extends AceAbility {   
  3.   @Override   
  4.   public void onStart(Intent intent) {     
  5.     // 注冊, 如果需要在Page初始化(onInit或之前)時調用AceInternalAbility的能力,注冊操作需要在super.onStart之前進行     
  6.     ComputeInternalAbility.register(this);     
  7.     ...     
  8.     super.onStart(intent);   
  9.   }   
  10.   @Override    
  11.   public void onStop() {     
  12.     // 注銷     
  13.     ComputeInternalAbility.unregister();      
  14.     super.onStop();   
  15.   } 

在JAVA目錄下實現InternalAbility(此處為ComputeInternalAbility)

  1. public class ComputeInternalAbility extends AceInternalAbility {   
  2.   private static final String BUNDLE_NAME = "com.example.hiaceservice";   
  3.   private static final String ABILITY_NAME = "com.example.hiaceservice.ComputeInternalAbility";   
  4.   private static final int SUCCESS = 0;   
  5.   private static final int ERROR = 1;   
  6.   private static final int PLUS = 1001;   
  7.    
  8.   private static ComputeInternalAbility instance; 
  9.   private AbilityContext abilityContext;   
  10.   // 如果多個Ability實例都需要注冊當前InternalAbility實例,需要更改構造函數,設定自己的bundleName和abilityName   
  11.   public ComputeInternalAbility() {     
  12.     super(BUNDLE_NAME, ABILITY_NAME);   
  13.   }   
  14.   public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) {     
  15.     switch (code) {       
  16.     case PLUS: {         
  17.       String dataStr = data.readString();         
  18.       RequestParam param = new RequestParam();         
  19.       try {                 
  20.         param = ZSONObject.stringToClass(dataStr, RequestParam.class);         
  21.       } catch (RuntimeException e) {                 
  22.         HiLog.error(LABEL, "convert failed.");         
  23.       }         
  24.        
  25.       // 返回結果當前僅支持String,對于復雜結構可以序列化為ZSON字符串上報         
  26.       Map<String, Object> result = new HashMap<String, Object>();         
  27.       result.put("code", SUCCESS);         
  28.       result.put("abilityResult", param.getFirstNum() + param.getSecondNum());         
  29.       // SYNC         
  30.       if (option.getFlags() == MessageOption.TF_SYNC) {           
  31.         reply.writeString(ZSONObject.toZSONString(result));         
  32.       } else {           
  33.       // ASYNC           
  34.         MessageParcel responseData = MessageParcel.obtain();           
  35.         responseData.writeString(ZSONObject.toZSONString(result));           
  36.         IRemoteObject remoteReply = reply.readRemoteObject();           
  37.         try {             
  38.           remoteReply.sendRequest(0, responseData, MessageParcel.obtain(), new MessageOption());           
  39.         } catch (RemoteException exception) { 
  40.           return false;           
  41.         } finally {               
  42.           responseData.reclaim();           
  43.         }         
  44.       }         
  45.       break;       
  46.     }       
  47.     default: {         
  48.       Map<String, Object> result = new HashMap<String, Object>();         
  49.       result.put("abilityError", ERROR);         
  50.       reply.writeString(ZSONObject.toZSONString(result));         
  51.       return false;       
  52.     }     
  53.   }     
  54.   return true;   
  55. }   
  56.  
  57. /**  * Internal ability 注冊接口。  */   
  58.   public static void register(AbilityContext abilityContext) {     
  59.     instance = new ComputeInternalAbility();     
  60.     instance.onRegister(abilityContext);   
  61.   }   
  62.   private void onRegister(AbilityContext abilityContext) {     
  63.     this.abilityContext = abilityContext;     
  64.     this.setInternalAbilityHandler((code, data, reply, option) -> {    
  65.     return this.onRemoteRequest(code, data, reply, option);     
  66.     });   
  67.   }   
  68. /**   * Internal ability 注銷接口。   */   
  69.   public static void unregister() {     
  70.     instance.onUnregister();   
  71.   }   
  72.   private void onUnregister() {     
  73.     abilityContext = null;     
  74.     this.setInternalAbilityHandler(null);   
  75.   } 

以上代碼樣例只是關鍵部分,完整代碼樣例可參考官網資料【JS FA如何調用PA】:

JS FA如何調用PA

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-js-fa-call-pa-0000001050435961

本文介紹了JS FA(Feature Ability)調用JAVA PA(Particle Ability)的機制和使用場景,基于JS UI框架開發的應用可以使用該機制完成更豐富的功能。未來HarmonyOS會持續豐富完善JS API,為開發者提供更便捷的API能力。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-09-10 15:13:41

鴻蒙HarmonyOS應用

2021-10-27 10:05:55

鴻蒙HarmonyOS應用

2022-03-07 14:58:10

ArkUIJS FAJava

2021-10-14 09:53:38

鴻蒙HarmonyOS應用

2022-06-02 14:27:05

UI框架JS

2021-12-20 10:07:39

鴻蒙HarmonyOS應用

2022-09-08 15:18:51

Ability鴻蒙

2015-08-17 09:46:15

UIjs

2022-10-27 16:01:41

AbilityStage模型FA模型

2022-11-11 10:56:37

2020-02-20 15:19:56

JavaSQL注入

2022-05-16 11:17:01

應用開發JSJAVA

2014-07-21 17:48:09

PhoneGapCordovaHtml5

2009-06-01 10:47:32

jboss seam例jboss seam開jboss seam

2025-01-15 13:46:23

2024-11-26 07:40:44

3D游戲場景

2011-09-08 10:32:27

Node.js

2021-03-25 15:54:14

鴻蒙HarmonyOS應用開發

2011-07-01 11:02:30

EnyowebOShello world

2011-04-22 11:24:13

mootools
點贊
收藏

51CTO技術棧公眾號

快射av在线播放一区| 国产精品怡红院| 成人3d动漫在线观看| 欧美日韩国产免费| 轻点好疼好大好爽视频| 色综合久久网女同蕾丝边| 美女性感视频久久| 性日韩欧美在线视频| 日本黄色小视频在线观看| 国产精品亚洲欧美日韩一区在线 | 精品日本一区二区三区| 伊人成年综合网| 国内综合精品午夜久久资源| 久久精品一本久久99精品| 国产精品1区2区在线观看 | 大陆精大陆国产国语精品| 狠狠色狠狠色综合日日五| 中文字幕一区二区三区5566| 亚洲第一天堂在线观看| 首页国产欧美日韩丝袜| 欧美高清视频在线| 天堂av网手机版| 女一区二区三区| 欧美一区国产二区| 免费日韩中文字幕| 四虎亚洲精品| 亚洲欧洲精品一区二区三区| 精品国产中文字幕| 99精品在线视频观看| 日韩在线一区二区| 4438全国成人免费| 日本一级淫片色费放| 久久精品国内一区二区三区水蜜桃| 日韩久久精品成人| 中国特级黄色片| 国产精品亚洲欧美一级在线| 欧美日韩亚洲国产综合| 欧美三级午夜理伦三级| av女在线播放| 亚洲 欧美综合在线网络| 免费观看中文字幕| 黄色在线观看网站| 自拍偷拍国产精品| 影音先锋欧美在线| 色老头视频在线观看| 国产视频一区在线观看| 美日韩免费视频| 亚洲欧美色视频| 99精品视频一区| 久久久一本精品99久久精品| 黄色片一区二区| 成人深夜视频在线观看| 成人在线观看91| 国模人体一区二区| 懂色av中文字幕一区二区三区| 亚洲综合中文字幕68页| 国产人妖一区二区| 国产成人精品免费看| 国产aⅴ精品一区二区三区黄| 精品人妻无码一区二区色欲产成人 | 黑人性生活视频| 日韩欧美另类中文字幕| 日韩欧美电影一二三| 中文字幕18页| 欧美美女黄色| 一道本无吗dⅴd在线播放一区| 国产一区二区三区四区五区六区| 久久av网址| 丝袜情趣国产精品| 欧美国产在线看| 亚洲精品极品| 国产成人一区二区三区小说| 中文字幕免费播放| 国产一区视频网站| 国产精品一区二区三区在线| 神马亚洲视频| 中文乱码免费一区二区| 精品国产三级a∨在线| 黄页在线观看免费| 91黄色免费观看| 五月天国产视频| 久久久久久毛片免费看| 亚洲视频专区在线| 国产精品99久久久久久成人| 伊人久久亚洲美女图片| 日韩免费视频在线观看| 国产理论视频在线观看| av电影天堂一区二区在线| 日本精品一区二区三区视频 | 国产不卡av一区二区| 日韩在线视频一区| 日本三级视频在线| 男女男精品网站| 岛国一区二区三区高清视频| 嫩草研究院在线| 成人欧美一区二区三区1314 | 国产一二在线播放| 欧美日韩亚洲综合在线| 亚洲乱妇老熟女爽到高潮的片| 神马久久影院| 欧美成人高清视频| 99re这里只有精品在线| 国产成人免费视频网站高清观看视频| 欧美日韩精品久久久免费观看| 黄色动漫在线观看| 色婷婷国产精品| 天堂va欧美va亚洲va老司机| 精品盗摄女厕tp美女嘘嘘| 久久成人国产精品| 免费av中文字幕| 国产成人av一区二区三区在线| 麻豆传媒一区| h片在线观看下载| 7777精品伊人久久久大香线蕉的 | 一区二区三区在线观看欧美| 国产成人综合一区| 农村少妇一区二区三区四区五区| 久久精品国产96久久久香蕉| 国产又粗又猛又黄视频| 91色porny在线视频| 日本丰满大乳奶| 久久免费影院| 国产一区二区三区丝袜| 天海翼一区二区| 国产·精品毛片| 91社在线播放| 91嫩草国产线观看亚洲一区二区| 亚洲欧洲一区二区三区久久| 国产区一区二区三| 成人av在线电影| 国产在线视频综合| 日韩精品成人| 久久资源免费视频| 国产精品久久久久久久久久久久久久久久 | 免费看啪啪网站| 欧美视频精品| 中文字幕国产亚洲2019| 中文字幕在线播| 国产午夜精品久久| 三级4级全黄60分钟| 任你弄精品视频免费观看| 韩国福利视频一区| 好吊视频一二三区| 亚洲国产wwwccc36天堂| 欧美老女人bb| 亚洲电影av| 国内精品视频免费| 筱崎爱全乳无删减在线观看| 亚洲精品国产综合久久| 国产精品免费av一区二区| www.日韩精品| 欧美日韩二三区| 久久综合色占| 国产精品美女www| av资源种子在线观看| 精品婷婷伊人一区三区三| 永久免费毛片在线观看| 久久99久久久久久久久久久| 亚洲一区不卡在线| 欧一区二区三区| 国模吧一区二区三区| 色香蕉在线视频| 日韩欧美一区视频| 美国黑人一级大黄| 久久草av在线| 国产欧美久久久久| 日韩人体视频| 国产精品视频播放| 97caopor国产在线视频| 精品美女一区二区三区| 免费在线不卡视频| 国产欧美一区二区精品秋霞影院| 一道本视频在线观看| 1024精品久久久久久久久| 99在线影院| 2022成人影院| 久久激情视频久久| 香蕉av一区二区三区| 欧美婷婷六月丁香综合色| 精品国产精品国产精品| zzijzzij亚洲日本少妇熟睡| 日本美女高潮视频| 欧美99在线视频观看| 久久免费看av| 亚洲成人a级片| 97在线日本国产| 日本最黄一级片免费在线| 日韩女优av电影在线观看| 日韩少妇裸体做爰视频| 国产精品久久国产精麻豆99网站| 亚洲最大视频网| 日韩av中文字幕一区二区三区| 99视频精品全部免费看| 亚洲人成伊人成综合图片| 成人网在线免费观看| 日本三级一区| 欧美成人网在线| 黄色电影免费在线看| 欧美一区二区精品在线| 无码人妻av免费一区二区三区| 樱花草国产18久久久久| 91视频免费在观看| 成人午夜电影小说| 狠狠干狠狠操视频| 国产亚洲福利| 国产91在线亚洲| 欧美午夜精品一区二区三区电影| 国产精品视频入口| 亚洲成人毛片| 国产精品久久久久免费a∨大胸 | 国产女主播在线播放| 日本免费新一区视频| 少妇av一区二区三区无码| 久久久久蜜桃| 亚洲精品中字| 久久成人av| 九色91视频| 日本一区精品视频| 国产欧美中文字幕| 欧美日韩精品免费观看视欧美高清免费大片| 九色精品免费永久在线| 欧美日韩视频在线播放| 亚洲午夜av久久乱码| 手机亚洲第一页| 日韩av综合网站| 国产极品久久久| 91精品国产高清一区二区三区| 这里只有精品国产| 色综合久久久久综合体| 黄色片视频网站| 午夜国产精品一区| www.国产成人| 亚洲福利电影网| 日韩三级av在线| 精品成人国产在线观看男人呻吟| 免费一级特黄特色大片| 亚洲综合成人网| 国产一级在线播放| 一二三四社区欧美黄| 亚洲av无码一区二区三区在线| 中文字幕一区av| 成人18视频免费69| 国产精品传媒入口麻豆| 免费看一级黄色| 最好看的中文字幕久久| 免费看特级毛片| 亚洲欧美电影一区二区| 天堂а√在线中文在线鲁大师| 欧美国产精品一区二区三区| 成人小视频免费看| 国产精品久久久久影院色老大| 久久免费手机视频| 中文字幕综合网| 久久久无码一区二区三区| 夜夜精品视频一区二区| 日韩大片免费在线观看| 一本久道中文字幕精品亚洲嫩 | 日韩成人午夜精品| 在线看的黄色网址| 国产一区二区三区日韩| 精品国产乱码久久久久夜深人妻| www..com久久爱| 亚洲a v网站| 欧美国产欧美综合| 懂色av蜜臀av粉嫩av永久| 一区二区三区在线观看动漫| 国产精品23p| 色老综合老女人久久久| 亚洲天堂免费av| 精品久久久久久综合日本欧美| 日本黄色免费视频| 国产亚洲精品91在线| 免费看美女视频在线网站| 欧美激情第6页| 欧美粗大gay| 成人啪啪免费看| 欧美做受69| 亚洲一区三区| 亚洲无线一线二线三线区别av| 久久久免费视频网站| 久久国内精品自在自线400部| 精品国产一二区| 国产亚洲精品资源在线26u| 中文字幕在线观看2018| 午夜精品一区二区三区电影天堂 | 成年免费在线观看| 欧美三片在线视频观看| 亚洲国产一二三区| 亚洲精品自拍偷拍| 国产原创精品视频| 日韩av电影国产| 日本超碰一区二区| 日本不卡在线播放| 亚洲网站在线| 亚欧激情乱码久久久久久久久| 成人一级黄色片| 亚洲熟女少妇一区二区| 欧美性xxxxx| 国产黄色片网站| 在线精品视频视频中文字幕| 91九色国产在线播放| 国产在线拍揄自揄视频不卡99| 老司机精品在线| 91嫩草国产丨精品入口麻豆| 爽爽淫人综合网网站| 少妇搡bbbb搡bbb搡打电话| 国产精品久久久久久久久搜平片| 国产免费av一区二区| 欧美一区二区三区免费观看视频 | 亚洲免费看黄网站| 黄色av一级片| 亚洲精品久久久久| 91麻豆一二三四在线| 国产欧美一区二区白浆黑人| 久久不见久久见免费视频7| 蜜桃传媒一区二区三区| 国产美女久久久久| 欧美福利在线视频| 色香蕉久久蜜桃| 日本成人一区| 97免费视频在线播放| 日韩成人18| 亚洲av首页在线| 精品一区二区三区在线观看 | 亚洲一区二区三区视频在线播放| 国产精品人妻一区二区三区| 亚洲夜晚福利在线观看| 欧美天堂视频| 蜜桃传媒视频第一区入口在线看| 一区视频在线看| 国产亚洲精品成人a| 亚洲精品欧美激情| 国产精品无码免费播放| 色噜噜国产精品视频一区二区| 在线国产成人影院| 欧美一区二区三区四区在线观看地址| 亚洲综合日本| av网站有哪些| 色综合久久66| 国产美女性感在线观看懂色av| 欧洲亚洲免费在线| 亚洲伊人春色| 欧美aⅴ在线观看| 国产人妖乱国产精品人妖| 国产九色91回来了| 色偷偷综合社区| 999久久久国产999久久久| japanese在线视频| 国产久卡久卡久卡久卡视频精品| 欧美人妻一区二区| 日韩精品一区二区三区视频在线观看| 男插女视频久久久| 久久成人资源| 日韩国产在线一| 一起操在线播放| 精品av久久707| 国偷自产一区二区免费视频| 日本一区高清不卡| 久久国内精品视频| 欧美黑人精品一区二区不卡| 亚洲成人三级在线| 中文在线8资源库| 亚洲午夜精品久久久中文影院av| 韩国成人精品a∨在线观看| 欧美成人免费观看视频| 欧美精品一区二区三区蜜桃| 欧美大胆性生话| 在线国产伦理一区| 国产69精品久久777的优势| 亚洲欧美精品一区二区三区| 国产一区二区三区欧美| 国产精品亚洲欧美一级在线| 亚洲人成无码网站久久99热国产| 久久久国际精品| 国产日本精品视频| 91成人在线视频| 91亚洲国产成人久久精品| 精品国产乱码久久久久夜深人妻| 欧美日韩中文在线观看| 欧美日本一道| 国内精品久久国产| 美国一区二区三区在线播放| 久久久久免费看| 亚洲少妇中文在线| 亚洲一区二区三区免费| 免费观看精品视频| 自拍av一区二区三区| 欧美日韩伦理片| 99在线首页视频| 秋霞成人午夜伦在线观看| 国产真人真事毛片| 中文字幕亚洲欧美| 精品自拍偷拍| 天堂av8在线| 欧美性猛交xxxx偷拍洗澡| 黄色动漫在线观看| 日韩aⅴ视频一区二区三区| 国产成人免费视频精品含羞草妖精| 波多野结衣高清在线| 欧美交受高潮1|