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

看我用Android開發者聽得懂的語言解釋快應用頁面的生命周期和接口router-12.4

開發
就像世界上第一批Android工程師大多都是iOS工程師轉行一樣,世界上第一批QuickApp工程師也大多都是Android工程師轉行。

就像世界上***批Android工程師大多都是iOS工程師轉行一樣,世界上***批QuickApp工程師也大多都是Android工程師轉行。將快應用知識與Android知識對比學習可以起到溫故知新的效果。

查閱快應用官方文檔可知快應用的“頁面”和Android原生的Activity都是提供一個可以給用戶來交互的屏幕,在底層也都是用Stack保存瀏覽記錄。理解頁面的生命周期就像理解Activity’的生命周期一樣,有助于更好的組織頁面的業務邏輯,方便頁面之間的交互與資源釋放等的處理。但為何“頁面”僅有三種狀態而Activity卻有四種呢?又為何“頁面”沒有類似Activity的啟動模式呢?本文將為你揭曉答案:

頁面的生命周期和狀態

眾所眾知Activity的生命周期由七個主要被動方法以及onBackPressed()、onNewIntent()、onActivityResult()、onSaveInstanceState()和onRestoreInstanceState()等其他被動方法組成,并且有、、和共四種狀態;而查閱官方文檔可知頁面的被動方法僅有七個,而狀態只有、和三種。我來給大家對比分析一下兩組方法的對應關系。

onInit()和onReady()

根據快應用官方文檔的說法:onInit()方法表示ViewModel的數據已經準備好,可以開始使用頁面中的數據,能且僅能調用一次。onReady()方法表示ViewModel的模板已經編譯完成,可以開始獲取DOM節點,能且僅能調用一次。

每個Android開發者的類庫里都有一個BaseActivity,這個BaseActivity里一般都有初始化配置、綁定View的同步方法onInitViews()和請求數據的異步方法onInitData();我們可以把onInit()理解為onInitData(),把onReady()理解為onInitViews()。

如果把眼光放遠一點,拿頁面與Fragment比較,onInit()更像Fragment的onCreate(),而onReady()更像onCreateView()。

onShow()和onHide()

每個快應用的App中可以同時運行多個頁面,但是每次只能顯示其中一個頁面;這點不同于Android開發,可以同時顯示多個Activity;也不同與純前端開發,瀏覽器頁面中每次只能有一個頁面,當前頁簽打開另一個頁面,上個頁面就銷毀了。

根據快應用官方文檔的說法:頁面被切換隱藏時調用onHide(),頁面被切換重新顯示時調用onShow()。很明顯這與Activity有onStart()和onStop()、onResume()和onPause()兩對方法不同,這是因為頁面不像Activity有透明背景和Theme.Dialog主題,所以Activity的可見狀態和前臺狀態在頁面里僅對應顯示狀態。

onDestroy()

根據快應用官方文檔的說法:onDestroy()方法在頁面被銷毀時調用,能且僅能調用一次。被銷毀的可能原因有:用戶從當前頁面返回到上一頁,或者用戶打開了太多的頁面,框架自動銷毀掉部分頁面,避免占用資源。而官方建議頁面進入銷毀狀態時應該做一些釋放資源的操作,這和Activity的onDestroy()方法的推薦使用方式不謀而合,所以頁面的onDestroy()方法就是Activity的onDestroy()方法。

onBackPress()

根據快應用官方文檔的說法:當用戶點擊實體BACK按鍵或左上角返回菜單時觸發onBackPress()事件。我想沒有人不會把頁面的onBackPress()方法和Actvity的onBackPressed()方法聯系到一起。

如果事件響應方法***返回true表示不返回,自己處理業務邏輯,完畢后開發者自行調用router.back()方法返回。代碼如下:


onBackPress (params) {

//做自己喜歡的事

return true

}

對比一下Activity的onBackPressed()的override方式:


@Override 

public void onBackPressed() { 

// super.onBackPressed();

// 做自己喜歡的事 

}

onMenuPress()

對比一下onBackPress()可知:當用戶點擊右上角菜單時觸發onMenuPress()事件。如果我們有使用菜單的需求,可以通過manifest.json中的menu屬性配置是否顯示右上角的菜單。

所有支持快應用的國產Android設備的MENU鍵都用來清理內存,因此實體MENU鍵不會觸發onMenuPress(),這點與onBackPress()有所區別。

頁面路由接口router

根據快應用官方文檔的說法:我們可以通過配置a組件的href屬性跳轉到應用內的頁面,有點類似于Android開發中已不被推薦使用的的隱式Intent跳轉Activity;此外我們也可以使用router接口,這就有點類似于Android開發的顯式Intent組件或者ARouter框架。本文的一切頁面跳轉都使用router接口。

常見方法

接口router常見方法在官方文檔里寫得很清楚,我只講幾點注意事項:

(1)接口router的push()方法能跳轉應用外的Activity包括電話、短信、郵件和其他快應用

(2)接口router的push()方法不能實現Android的Intent的“android.intent.category.HOME”標簽的功能,也就是說,除非用戶點HOME能回到桌面,否則開發者不能靠重寫onBackPress()保留首頁

(3)打開照相機、QQ聊天、微信分享、支付寶付款用的不是router

(4)back()方法的路徑參數是path,并非push()和replace()的uri

回傳參數的方式

傳遞參數的方式不在本文的討論范圍之內,但回傳參數的方式卻涉及生命周期,我們先看快應用回傳參數的官方代碼:


onHide () {

// 頁面被切換隱藏時,將要傳遞的數據對象寫入全局變量

this.$app.$data.dataPageB = {

gotoPage: 'pageA',

params: {

msg: this.msg

}

}

},

對比一下Activity的setResult()方法的調用:


Intent intent = new Intent(); 

intent.putExtra("dataPageB",dataPageB); 

setResult(RESULT_OK,intent);

快應用接收回傳參數的官方代碼:

 

onShow () {

// 頁面被切換顯示時,從數據中檢查是否有頁面B傳遞來的數據

if (this.$app.$data.dataPageB && this.$app.$data.dataPageB.gotoPage === 'pageA') {

// 從數據中獲取回傳給本頁面的數據

const data = this.$app.$data.dataPageB.params

this.msg = data.msg

}

},

對比一下Activity的onActivityResult()方法:

 

@Override 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

super.onActivityResult(requestCode, resultCode, data); 

if (requestCode == pageA && resultCode == RESULT_OK){ 

this.msg = ((BaseBean)data.getSerializableExtra("dataPageB")).getMessage(); 

} 

}

由此可見,在onRscume()方法里檢驗全局變量的變化這一行為,作為Android原生開發中飽受詬病的新手行為,在快應用開發中是官方推薦的,所以快應用不需要類似onActivityResult()方法的方法。

研究接口router和頁面生命周期關系的實踐

“紙上得來終覺淺”,我們寫一個LifecycleDemo來研究接口router和頁面生命周期關系:

首先打開這個LifecycleDemo,我們可以看到logcat打印出如下信息:

 

### 頁面A onInit ###

### 頁面A onReady ###

### 頁面A onShow ###

當前頁面在頁面棧中的位置 : 1/1

點擊BACK鍵,返回桌面,logcat打印出如下信息:

 

### 頁面A onBackPress ###

### 頁面A onHide ###

### 頁面A onDestroy ###

與官方文檔描述相同,符合預期

打開其他Activity

接下來我們打開其他Activity,包括系統桌面、打電話界面和其他應用

點擊HOME鍵,然后熱啟動LifecycleDemo,Logcat打印如下:


### 頁面A onHide ###

### 頁面A onShow ###

當前頁面在頁面棧中的位置 : 1/1

應用內打開其他系統Activity,然后熱啟動LifecycleDemo,Logcat打印如下:


### 頁面A onHide ###

### 頁面A onShow ###

當前頁面在頁面棧中的位置 : 1/1

應用內打開別的快應用,然后熱啟動LifecycleDemo,Logcat打印如下:

### 頁面A onHide ###

### 頁面A onShow ###

當前頁面在頁面棧中的位置 : 1/1

結論:符合預期,支持上文onShow()相當于onStart()和onResume(),onHide()相當于onPause()和onStop()的猜想。

用push()方法進行應用內頁面跳轉

用push()方法跳轉到頁面A,logcat打印如下:


### 頁面A onHide ###

### 頁面A onInit ###

### 頁面A onReady ###

### 頁面A onShow ###

當前頁面在頁面棧中的位置 : 2/2

顯然頁面棧里的順序為AA,支持上文頁面的啟動模式相當于Activity的Standard模式的猜想。現在猜想***個A是前面的,第2、3、4個A是后面的。我們接著用push()方法跳轉到頁面B,logcat打印如下:


### 頁面A onHide ###

### 頁面B onInit ###

### 頁面B onReady ###

### 頁面B onShow ###

當前頁面在頁面棧中的位置 : 3/3

顯然頁面棧里的順序為AAB,也符合預期,支持上文猜想。

我們發現快應用官方文檔存在歧義,就是首頁究竟是指穩定運行時頁面棧底的頁面(類似Android原生開發的MainActivity),還是指manifest.json文件中“router.entry”對應的頁面(類似AndroidManifest.xml文件中帶“android.intent.action.MAIN"標簽的Activity,通常被命名為SplashActivity),我們驗證一下:

當“router.entry”對應頁面A,而頁面棧里頁面順序為BBAACC的時候,我們用push()方法跳轉到首頁。首頁是這樣的:

而logcat打印如下:

### 頁面C onHide ###

### 頁面A onInit ###

### 頁面A onReady ###

### 頁面A onShow ###

當前頁面在頁面棧中的位置 : 7/7

原來接口router可以跳轉的首頁指的是“router.entry”對應的頁面。

用replace()方法進行應用內頁面跳轉

當頁面棧里僅有A的情況下,用replace()方法跳轉到頁面A,logcat打印如下:

### 頁面A onHide ###

### 頁面A onDestroy ###

### 頁面A onInit ###

### 頁面A onReady ###

### 頁面A onShow ###

當前頁面在頁面棧中的位置 : 1/1

顯然頁面棧里僅有一個A,猜想replace()方法類似Activity里的這段代碼:

 


startActivity(intent);

finish();

又猜想第1、2個A是前面的,第3、4、5個A是后面的。我們接著用replace()方法跳轉到頁面B,logcat打印如下:

 

### 頁面A onHide ###

### 頁面A onDestroy ###

### 頁面B onInit ###

### 頁面B onReady ###

### 頁面B onShow ###

當前頁面在頁面棧中的位置 : 1/1

符合預期,支持上文猜想。

用back()方法進行應用內頁面跳轉

在頁面棧里的順序為AABBCC的情況下,根據文檔僅能得出用back()方法返回上一頁后頁面棧里的順序為AABBC,返回頁面B后頁面棧里的順序為AABB,返回頁面A或首頁后頁面棧里的順序為AA,有點類似Intent的FLAG_ACTIVITY_CLEAR_TASK標簽。我們只討論官方文檔忽略的內容:

我們用back()方法跳轉到頁面C,頁面無變化;在頁面棧里的順序為ABCABC的情況下,我們用back()方法跳轉到頁面C,頁面也無變化。得出back()方法不能用來跳轉到棧頂頁面的結論。

總結

本文中獲得的有關快應用頁面生命周期的知識和經驗的總結如下:

(1)頁面可以理解為Activity,并且啟動模式能且僅能為standard

(2)頁面的onInit()和onReady()可以分別理解為你的BaseActivity的onInitData()和 onInitViews()。

(3)Activity的可見狀態和前臺狀態在頁面里都是顯示狀態,所以onShow()可以理解為onStart()和onResume(),同理onHide()可以理解為onPause()和onStop()

(4)頁面的onDestroy()里可以理解為Activity的onDestroy()

(5)快應用沒有singleTop這種啟動模式,自然沒有onNewIntent()方法,但用replace()方法啟動棧頂頁面可以起到同樣效果。

(6)onActivityResult()、onSaveInstanceState()和onRestoreInstanceState()和也都沒有對應方法

(7)onBackPress()是BACK鍵觸發的方法,可以被攔截,但無法改成HOME鍵的效果

(8)onMenuPress()方法不是MENU鍵觸發的方法

(9)快應用沒有singleTask這種啟動模式,但back()方法起到類似Intent的FLAG_ACTIVITY_CLEAR_TASK的作用。

(10)back()方法不能用來跳轉到棧頂頁面。

(11)官方文檔中所有的“首頁”都指manifest.json文件中“router.entry”對應的頁面(類似AndroidManifest.xml文件中帶“android.intent.action.MAIN"標簽的Activity,通常被命名為SplashActivity),而不是指指穩定運行時頁面棧底的頁面(類似Android原生開發的MainActivity)

附錄:本文完整代碼

頁面A(文件路徑:…/src/PageA/index.ux)的完整代碼(B、C的代碼僅title不同):

<template>

<div class="doc-page">

<text class="title">歡迎打開{{title}}</text>

<text class='text' if="{msg}">{{msg}}</text>

<input type="button" class="btn" onclick="this.$app.$def.routePush('/PageA')" value="用push()方法跳轉到頁面A" />

<input type="button" class="btn" onclick="this.$app.$def.routePush('/PageB')" value="用push()方法跳轉到頁面B" />

<input type="button" class="btn" onclick="this.$app.$def.routePush('/PageC')" value="用push()方法跳轉到頁面C" />

<input type="button" class="btn" onclick="this.$app.$def.routePush('/')" value="用push()方法跳轉到首頁" />

<input type="button" class="btn" onclick="this.$app.$def.routeReplace('/PageA')" value="用replace()方法跳轉到頁面A" />

<input type="button" class="btn" onclick="this.$app.$def.routeReplace('/PageB')" value="用replace()方法跳轉到頁面B" />

<input type="button" class="btn" onclick="this.$app.$def.routeReplace('/PageC')" value="用replace()方法跳轉到頁面C" />

<input type="button" class="btn" onclick="this.$app.$def.routeReplace('/')" value="用replace()方法跳轉到首頁" />

<input type="button" class="btn" onclick="this.$app.$def.routeBack('/PageA')" value="用back()方法跳轉到頁面A" />

<input type="button" class="btn" onclick="this.$app.$def.routeBack('/PageB')" value="用back()方法跳轉到頁面B" />

<input type="button" class="btn" onclick="this.$app.$def.routeBack('/PageC')" value="用back()方法跳轉到頁面C" />

<input type="button" class="btn" onclick="this.$app.$def.routeBack('/')" value="用back()方法跳轉到首頁" />

<input type="button" class="btn" onclick="this.$app.$def.routeBack()" value="用back()方法返回上一頁" />

 

<input type="button" class="btn" onclick="routeClear()" value="只保留當前頁面" />

<input type="button" class="btn" onclick="this.$app.$def.routePush('tel:10086')" value="跳轉到打電話頁面" />

<input type="button" class="btn" onclick="this.$app.$def.routePush('hap://app/me.ele.xyy/')" value="跳轉到指定快應用(餓了么)" />

</div>

</template>

<style>

@import '../Common/css/common.css';

.title {

font-size: 40px;

text-align: center;

}

.text {

font-size: 30px;

text-align: center;

}

</style>

<script>

import router from '@system.router'

export default {

private: {

msg:'',

title: '頁面A',

},onInit () {

this.$page.setTitleBar({text: this.title})

console.error(`### `+this.title+` onInit ###`)

this.msg = ""

},

onReady () {

console.error(`### `+this.title+` onReady ###`)

},

onShow () {

console.error(`### `+this.title+` onShow ###`)

this.msg = this.$app.$def.routeInfo()

console.error(`${this.msg}`)

},

onHide () {

console.error(`### `+this.title+` onHide ###`)

},

onDestroy () {

console.error(`### `+this.title+` onDestroy ###`)

},

onBackPress (params) {

console.error(`### `+this.title+` onBackPress ###`)

},

onMenuPress () {

console.error(`### `+this.title+` onMenuPress ###`)

},

routeClear() {

this.$app.$def.routeClear()

 

this.msg = this.$app.$def.routeInfo()

console.error(`${this.msg}`)

}

 

}

</script>

工具類util.js的完整代碼:

import router from '@system.router' 
 
function routePush(uri,params) { 
 
// 跳轉到應用內的某個頁面,或其他Activity 
 
// 匹配到與路徑與uri相同的頁面,則跳轉到該頁面,否則跳轉到首頁 
 
// 參數為"/",跳轉到首頁 
 
// uri若為包含schema的完整uri,則跳轉到應用外的Activity(目前僅支持電話、短信、郵件和其他快應用) 
 
// params為傳遞的參數,不在本文討論范圍內 
 
router.push ({ 
 
uri: uri, 
 
params: params 
 
}) 
 
} 
 
function routeReplace(uri,params) { 
 
// 跳轉到應用內的某個頁面,同時關閉當前頁面 
 
// 除了不能跳轉到應用外的頁面,一切同push()方法 
 
router.replace ({ 
 
uri: uri, 
 
params: params 
 
}) 
 
} 
 
function routeBack(path) { 
 
// 跳轉到應用內的某個已經打開過的頁面,同時關閉當前頁面 
 
// 不傳參數,或沒有匹配到對應頁面,則返回上一個頁面 
 
// 參數為"/",返回首頁 
 
// 若匹配到多個頁面,返回至***打開的頁面 
 
// 注意back()方法的參數是path而不是uri 
 
router.back ({ 
 
path: path 
 
}) 
 
} 
 
function routeInfo (){ 
 
// 用getState()方法獲取當前頁面狀態,index表示當前頁面在頁面棧中的位置(計數從0開始) 
 
// 用getLength()方法獲取當前頁面棧的頁面數量 
 
return `當前頁面在頁面棧中的位置 : `+ (router.getState().index + 1) + `/` + router.getLength() 
 
} 
 
function routeClear (){ 
 
// 清空所有歷史頁面記錄,僅保留當前頁面 
 
router.clear() 
 
} 
 
export default { 
 
routeReplace, 
 
routePush, 
 
routeBack, 
 
routeInfo, 
 
routeClear 
 
} 

 

責任編輯:張燕妮 來源: 51CTO
相關推薦

2019-07-18 13:01:18

數據科學數據湖數據挖掘

2015-10-16 09:19:12

2022-04-19 07:20:24

軟件開發安全生命周期SSDLC應用安全

2012-06-20 10:29:16

敏捷開發

2013-07-29 05:11:38

iOS開發iOS開發學習類的'生命周期'

2011-06-16 09:31:21

ActivityAndroid

2015-07-09 15:42:48

ios應用生命周期

2009-06-24 10:34:39

JSF生命周期JSF應用程序

2014-07-16 13:39:30

Windows Pho

2015-07-08 16:28:23

weak生命周期

2013-04-07 10:42:56

Asp.Net頁面周期

2022-09-27 17:27:05

Windchill+SaaSPTC

2014-07-11 11:09:10

App應用程序生命周期

2018-10-29 10:08:01

2023-05-18 10:48:29

Linux操作系統

2012-08-16 09:38:38

ASP.NET

2012-12-04 10:02:03

2009-07-31 10:47:18

ASP.NET頁面生命

2009-08-04 16:05:15

ASP.NET頁面生命

2009-08-04 16:50:15

ASP.NET頁面生命
點贊
收藏

51CTO技術棧公眾號

国产又粗又大又黄| 色婷婷综合久久| 欧美日本在线视频| 国产伦精品一区二区三区高清 | 不卡专区在线| 欧美日韩伦理在线免费| 高清在线不卡av| 一个人看的www久久| 免费无码毛片一区二三区| 一区二区三区黄| 亚洲大片在线| 欧美成人一区二区三区片免费| 91视频99| 在线观看亚洲网站| 四虎影视成人精品国库在线观看| 久久久蜜桃精品| 8050国产精品久久久久久| 精品国产一二区| 亚洲电影视频在线| 国产精品亚洲专一区二区三区| 日韩在线视频观看| 日本在线一二三区| melody高清在线观看| 欧美综合二区| 亚洲小视频在线| 最近免费中文字幕中文高清百度| 亚洲av成人精品日韩在线播放| 亚洲每日更新| 亚洲毛片在线观看.| aa在线观看视频| 黄色视屏免费在线观看| 精品写真视频在线观看| 久久久国产精彩视频美女艺术照福利| www.com黄色片| 天堂电影一区| 国产日韩在线不卡| 国产欧美日韩精品丝袜高跟鞋| 伊人影院综合网| 高清欧美日韩| 亚洲视频在线观看三级| 91在线精品播放| 欧美日韩在线观看成人| 6080成人| 欧美性猛交xxxxx水多| 欧美一区免费视频| 在线中文字幕视频观看| 成人资源在线| 亚洲午夜激情网页| 国产精品视频入口| 国产精品午夜福利| 亚洲精品99| 欧美一级黄色录像| 黄色成人在线看| 青青操在线视频| 欧美a一区二区| 国产亚洲欧美日韩精品| 在线精品一区二区三区| 欧美va在线观看| 亚洲美女屁股眼交| 国产一区国产精品| 日本丰满少妇做爰爽爽| 五月开心六月丁香综合色啪| 精品国产乱码久久久久久蜜臀 | 18禁一区二区三区| 成年永久一区二区三区免费视频| 国产精品国产三级国产普通话99| 91在线观看免费观看| 一本一道人人妻人人妻αv | 精品少妇人妻av免费久久洗澡| 日韩伦理av| 亚洲国产欧美在线| 五码日韩精品一区二区三区视频| 国产人妖在线播放| 日韩视频不卡| 久久精品国产96久久久香蕉| 欧美日韩国产一二三区| 另类在线视频| 欧美嫩在线观看| 逼特逼视频在线| 2024最新电影在线免费观看| 亚洲激情男女视频| 日本在线成人一区二区| 亚洲精品一区二区三区新线路 | youjizzxxxx18| 性欧美videoshd高清| 亚洲一区在线观看视频| 国产一区二区网| 国产精品亚洲一区二区三区在线观看 | 精品处破女学生| 成人3d动漫在线观看| 亚洲成人精品久久| 国内av一区二区| 欧美成人性网| 亚洲成人一二三| 免费在线观看的av网站| 日韩伦理av| 欧美日韩免费区域视频在线观看| 天天想你在线观看完整版电影免费| 偷拍25位美女撒尿视频在线观看| 国产iv一区二区三区| 精品中文字幕人| 亚洲欧美另类一区| 国产麻豆精品久久一二三| 国产在线一区二区三区欧美| 不卡在线视频| 亚洲国产综合色| www欧美激情| 都市激情亚洲综合| 天天影视色香欲综合网老头| 青青草综合在线| 毛片av在线| 国产精品久久久久影院老司| 欧美日韩大片一区二区三区| 色综合久久网女同蕾丝边| 中文字幕乱码亚洲精品一区| 日本在线播放一区| 黑人玩欧美人三根一起进| 亚洲狠狠丁香婷婷综合久久久| 男人用嘴添女人下身免费视频| 亚洲国产91视频| 日韩激情av在线免费观看| 国产一级二级视频| 午夜精品视频一区二区三区在线看| 午夜精品一区二区三区在线视| 国产午夜精品无码| 99精品国产99久久久久久福利| 国产精品美女主播在线观看纯欲| 中文字幕人妻精品一区| 奇米色777欧美一区二区| 国产精品一区二区免费看| 国产剧情在线观看| 18欧美乱大交hd1984| 特级黄色录像片| 美洲精品一卡2卡三卡4卡四卡| 亚洲一级二级三级| 国产永久免费网站| 精品久久久中文字幕| 91精品成人久久| 成人久久久精品国产乱码一区二区| 中文字幕亚洲成人| 久久撸在线视频| 久操精品在线| 不卡av电影院| 精品在线免费观看视频| 激情欧美一区二区| 一区二区冒白浆视频| 黄网站免费在线观看| 欧美在线制服丝袜| 少妇伦子伦精品无吗| 亚洲成人精品| 91久久精品国产| 成年人网站在线| 午夜a成v人精品| av在线无限看| 久久最新网址| 国产成人精品视频在线观看| 91在线观看喷潮| 中文字幕一区免费在线观看 | 亚洲伊人av| 亚洲免费视频一区二区| 成年人av网站| 国产老肥熟一区二区三区| 亚洲欧美精品| 538在线视频| 欧美探花视频资源| 野战少妇38p| 精品欧美久久| 国产精品99蜜臀久久不卡二区| 国产精品一区二区三区四区色| 色婷婷综合久色| 九九九视频在线观看| 老司机午夜精品| 久久综合中文色婷婷| 精品视频在线一区二区| 7777精品伊人久久久大香线蕉 | 精品久久久久成人码免费动漫| 91色porny在线视频| 黄频视频在线观看| 毛片无码国产| 中文国产成人精品| 国产成人亚洲精品自产在线| 经典三级在线一区| 伊人久久在线观看| 午夜先锋成人动漫在线| 久久99久久久久久久噜噜| 高潮毛片又色又爽免费 | 亚洲精品第一国产综合精品| 国产视频精品免费| 久久精品五月| 亚洲一区二区在| www.国产精品一区| 国产精品2018| 在线播放免费av| 亚洲美女视频网站| 国产特级aaaaaa大片| 亚洲va在线va天堂| 欧美激情视频二区| 成人a免费在线看| 777久久精品一区二区三区无码| 国产劲爆久久| 久久久久国产精品www| a级片在线视频| 中文字幕佐山爱一区二区免费| xxxx国产视频| 欧美精品aa| 亚洲伊人一本大道中文字幕| 亚洲1卡2卡3卡4卡乱码精品| 欧美综合色免费| 欧美黑吊大战白妞| 国产人妖乱国产精品人妖| 久久久久久久久久福利| 一区二区国产在线| 亚洲综合中文字幕在线| 理论片午夜视频在线观看| 亚洲国产成人久久综合| 亚洲综合视频在线播放| 欧美色videos| 久久丫精品久久丫| 中文字幕一区二区三区乱码在线| 西西大胆午夜视频| 国产成人在线看| 999一区二区三区| 国内自拍欧美| 成人av资源在线播放| 免费在线毛片网站| 国产丝袜一区视频在线观看| 国产精品suv一区| 国产亚洲一区二区三区在线观看 | 99在线精品免费| 熟女少妇在线视频播放| 欧美一区自拍| 日本sm极度另类视频| 加勒比一区二区三区在线| 欧美在线啊v一区| 日韩精品在线观看免费| 国产清纯美女被跳蛋高潮一区二区久久w| 中文字幕一区二区三区人妻在线视频 | 久久99国产成人小视频| 国偷自产av一区二区三区小尤奈| 国产精品国产亚洲精品| 国产在线高清精品| 性xxxxfjsxxxxx欧美| 日韩在线观看免费| 亚洲欧美激情国产综合久久久| 9191精品国产综合久久久久久 | 日本不卡一二三区黄网| 免费在线激情视频| 免费在线亚洲| 在线精品亚洲一区二区| 香蕉成人app| 91chinesevideo永久地址| 欧美1234区| 久久久久久欧美| 成人av影院在线观看| 久久久久日韩精品久久久男男 | 成人av资源网址| 成人动漫在线视频| 亚洲私拍视频| 欧美中文在线字幕| 三上悠亚一区二区| 国产精品美女久久久久久免费| 久久亚洲国产精品尤物| 久久久久久亚洲精品| 第一中文字幕在线| 国内揄拍国内精品| 最新中文字幕在线播放| 国产成人精品免费久久久久| 精品三级在线| 亚洲伊人第一页| 久久大胆人体视频| 欧美日韩在线播放一区二区| 成人精品影视| 波多野结衣 作品| 亚洲在线观看| www.这里只有精品| 丁香婷婷综合激情五月色| 九九热免费在线观看| 久久国产一二区| 蜜臀av免费观看| 国产不卡在线播放| 亚洲成人日韩在线| 成人性视频免费网站| 亚洲精品女人久久久| 国产欧美日韩三区| 国产盗摄一区二区三区在线| 日本一区二区高清| 一区二区成人免费视频| 精品日本高清在线播放| 在线观看亚洲国产| 精品国产百合女同互慰| 国产精品麻豆一区二区三区| 久久综合网hezyo| 一区二区三区短视频| 亚洲综合在线小说| 啪啪亚洲精品| 成人区一区二区| 美女一区二区三区| 亚洲成人av免费在线观看| 国产精品成人午夜| www亚洲视频| 欧美性色xo影院| 国产美女免费看| 亚洲人成网在线播放| 嫩草在线播放| 亚洲精品视频久久| 羞羞网站在线免费观看| 国产精欧美一区二区三区| 99久热这里只有精品视频免费观看| 国产三区精品| 亚洲女同中文字幕| 日本爱爱免费视频| 成人激情综合网站| 糖心vlog免费在线观看| 欧美视频在线观看免费| 亚洲成人黄色片| www.国产精品一二区| 午夜日韩成人影院| 国产在线资源一区| 韩国欧美一区| 91视频 -- 69xx| 国产美女一区二区三区| 免费黄视频在线观看| 国产精品三级在线观看| 免费视频久久久| 亚洲福利影片在线| 色呦呦在线看| 91九色在线观看| 一区二区日韩欧美| 一级 黄 色 片一| 成人精品国产福利| 欧美第一页在线观看| 欧美日韩性生活| 精品人妻av一区二区三区| 中文字幕日韩在线播放| 日韩pacopacomama| 欧美大香线蕉线伊人久久| 亚洲人成久久| 日本少妇xxxx| 欧美激情一区三区| 岛国av中文字幕| 日韩精品在线视频| www在线观看黄色| 国内视频一区二区| 国产精品综合色区在线观看| 色播五月综合网| 国产精品三级久久久久三级| 在线免费观看国产精品| 一二美女精品欧洲| 999国产精品亚洲77777| 亚洲精品一区二区三区四区五区| 日韩经典一区二区| 日本女人性视频| 亚洲九九爱视频| 成人免费公开视频| 午夜精品www| 五月国产精品| 国产精品无码av无码| 国产成人在线视频网址| 国产乱国产乱老熟300| 欧美www视频| 美女高潮视频在线看| 美女精品国产| 奇米精品一区二区三区在线观看| 1024在线看片| 91麻豆精品国产91久久久资源速度| a级毛片免费观看在线| 不卡视频一区二区三区| 在线视频日韩| av黄色在线免费观看| 亚洲电影在线免费观看| 无套内谢的新婚少妇国语播放| 136fldh精品导航福利| 国产精品视频一区二区三区四蜜臂| 国产青草视频在线观看| 成人高清视频免费观看| 午夜婷婷在线观看| 中文字幕精品—区二区| 欧美成人精品午夜一区二区| 日韩色妇久久av| 精品综合久久久久久8888| mm131美女视频| 亚洲高清免费视频| 日本v片在线免费观看| 国产美女扒开尿口久久久| 午夜性色一区二区三区免费视频 | 黄视频网站在线观看| 亚洲狠狠婷婷综合久久久| 国产美女一区二区三区| 毛片毛片女人毛片毛片| 日日狠狠久久偷偷四色综合免费| 中文字幕久久精品一区二区| 亚洲熟妇av一区二区三区| 亚洲丝袜精品丝袜在线| 欧美日韩伦理片| 91牛牛免费视频| 欧美专区一区二区三区| 欧美成人免费看| 伊人伊成久久人综合网小说| 亚洲高清在线一区| 99草草国产熟女视频在线|