日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小葵花妈妈课堂开课了:《Handler Looper Message 浅析》

發布時間:2023/12/18 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小葵花妈妈课堂开课了:《Handler Looper Message 浅析》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

# Handler Looper Message Thread

首先要闡述幾者之間的關系。 Thread 可以擁有多個handler對象; Thread 只能擁有一個Looper 和一個MessageQueue。

Looper 只能屬于一個Thread, 并且只能和MessageQueue 一一對應。 looper的在幾者中的作用是什么呢! Looper的作用就是起到 發動機的原理,當然它不是讓車跑起來,而是讓MessageQueue里的message被執行。 那么 Message被誰執行呢? 后文即會提到。

MessageQueue 也僅是和一個looper綁定,在出生的時候即決定了這件事,后面在代碼中會解釋為什么! MessageQueue里面存放就是 Message。

Looper

首先需要關注的是該方法。

public static void prepare() {prepare(true); } 復制代碼

參數為是否允許退出,答案是肯定的 true; 只有一種情況即主線程調用prepare時傳遞false,因為主線程不允許退出。 該方法即為 預熱發動機的入口。讓 Looper這臺機器進行啟動之前的準備工作。

private static void prepare(boolean quitAllowed) {if (sThreadLocal.get() != null) {throw new RuntimeException("Only one Looper may be created per thread");}sThreadLocal.set(new Looper(quitAllowed)); } 復制代碼

分析一下 是如何判斷已經prepare的呢? sThreadLocal.get() != null 那就需要看一下set是什么東東。就是準備的是什么呢?

/*** Sets the current thread's copy of this thread-local variable* to the specified value. Most subclasses will have no need to* override this method, relying solely on the {@link #initialValue}* method to set the values of thread-locals.** @param value the value to be stored in the current thread's copy of* this thread-local.*/ public void set(T value) {Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t);if (map != null)map.set(this, value);elsecreateMap(t, value); } 復制代碼

這個value就是上文提到的 new Looper(quitAllowed) createMap創建的是一個ThreadLocalMap。 每一個線程僅有一個ThreadLocalMap, 在該map中存儲內容為該線程本地變量的副本。ThreadLocalMap使用及注意事項以后單獨開講。

void createMap(Thread t, T firstValue) {t.threadLocals = new ThreadLocalMap(this, firstValue); } 復制代碼

當第一次sThreadLocal.get()時,會返回setInitialValue=null;

private Looper(boolean quitAllowed) {mQueue = new MessageQueue(quitAllowed);mThread = Thread.currentThread(); } 復制代碼

當一個線程只能有一個Looper之后也就意味著只能有一個MessageQueue.class

Looper.loop即為啟動發動機的入口,啟動之后開始進行消息輪詢,并且注釋說明一定要調用quit()退出輪詢。 Looper一直把MesageQueue所有的message執行完。 每執行完一個后即通過next拿到下一個message.

public static void loop() { --- for (;;) {Message msg = queue.next(); // might blockif (msg == null) {// No message indicates that the message queue is quitting.return;} //當隊列中沒有消息之后 即退出。// This must be in a local variable, in case a UI event sets the loggerfinal Printer logging = me.mLogging;if (logging != null) {logging.println(">>>>> Dispatching to " + msg.target + " " +msg.callback + ": " + msg.what);}final long traceTag = me.mTraceTag;if (traceTag != 0 && Trace.isTagEnabled(traceTag)) {Trace.traceBegin(traceTag, msg.target.getTraceName(msg));}try {msg.target.dispatchMessage(msg); //msg.target即為執行message工具。} finally {if (traceTag != 0) {Trace.traceEnd(traceTag);}}if (logging != null) {logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);}// Make sure that during the course of dispatching the// identity of the thread wasn't corrupted.final long newIdent = Binder.clearCallingIdentity();if (ident != newIdent) {Log.wtf(TAG, "Thread identity changed from 0x"+ Long.toHexString(ident) + " to 0x"+ Long.toHexString(newIdent) + " while dispatching to "+ msg.target.getClass().getName() + " "+ msg.callback + " what=" + msg.what);}msg.recycleUnchecked();} } 復制代碼

MessageQueue MessageQueue和Looper之間有個緊密的聯系就是通過 MessageQueue.next()方法。以next方法為切入點介紹MessageQueue.class

Message next() {// Return here if the message loop has already quit and been disposed.// This can happen if the application tries to restart a looper after quit// which is not supported.final long ptr = mPtr;if (ptr == 0) {return null;}int pendingIdleHandlerCount = -1; // -1 only during first iterationint nextPollTimeoutMillis = 0;for (;;) {if (nextPollTimeoutMillis != 0) {Binder.flushPendingCommands();}//natvie層進行阻塞,后文在Looper.c中介紹nativePollOnce(ptr, nextPollTimeoutMillis);synchronized (this) {// Try to retrieve the next message. Return if found.final long now = SystemClock.uptimeMillis();Message prevMsg = null;Message msg = mMessages;if (msg != null && msg.target == null) {// Stalled by a barrier. Find the next asynchronous message in the queue.// 當因為有 "同步分隔欄" 引起停滯后, 將要找到下一個異步消息, // 同步分隔欄后面的同步消息并不會執行do {prevMsg = msg;msg = msg.next;} while (msg != null && !msg.isAsynchronous());}if (msg != null) {if (now < msg.when) {// Next message is not ready. Set a timeout to wake up when it is ready.//如果當前的msg沒有準備好,那么就下次輪詢進入到等待。//計算等待時間nextPollTimeoutMillis = (int) Math.min(msg.when - now, Integer.MAX_VALUE);} else {// Got a message.//標記當次輪詢不會被wait,不需要被喚醒mBlocked = false;//當在鏈表隊列中找到可執行msg,把當前message調出,并修復原鏈接if (prevMsg != null) {prevMsg.next = msg.next;} else {mMessages = msg.next;}msg.next = null;if (DEBUG) Log.v(TAG, "Returning message: " + msg);//標記當前msg被使用狀態msg.markInUse();return msg;}} else {// No more messages.nextPollTimeoutMillis = -1;}// Process the quit message now that all pending messages have been handled.//如果looper調用了quit, messagequeue也進行退出操作。if (mQuitting) {dispose();return null;}// If first time idle, then get the number of idlers to run.// Idle handles only run if the queue is empty or if the first message// in the queue (possibly a barrier) is due to be handled in the future.// 引入了另外一個messagequeue的功能, idle handles的處理,// 當隊列為空的時候或沒有任務可執行的時候,執行idle handles內容。if (pendingIdleHandlerCount < 0&& (mMessages == null || now < mMessages.when)) {pendingIdleHandlerCount = mIdleHandlers.size();}if (pendingIdleHandlerCount <= 0) {// No idle handlers to run. Loop and wait some more.// 既沒有idle handlers 和message可以處理那么就需要阻塞,入隊時候就需要喚醒。mBlocked = true;continue;}if (mPendingIdleHandlers == null) {mPendingIdleHandlers = new IdleHandler[Math.max(pendingIdleHandlerCount, 4)];}mPendingIdleHandlers = mIdleHandlers.toArray(mPendingIdleHandlers);}// Run the idle handlers.// We only ever reach this code block during the first iteration.for (int i = 0; i < pendingIdleHandlerCount; i++) {final IdleHandler idler = mPendingIdleHandlers[i];mPendingIdleHandlers[i] = null; // release the reference to the handlerboolean keep = false;try {//執行idler中的回調,并且有返回值,true意味著想要保持這個idle下次繼續執行,//false則會從隊列中移除keep = idler.queueIdle();} catch (Throwable t) {Log.wtf(TAG, "IdleHandler threw exception", t);}if (!keep) {synchronized (this) {mIdleHandlers.remove(idler);}}}// Reset the idle handler count to 0 so we do not run them again.pendingIdleHandlerCount = 0;// While calling an idle handler, a new message could have been delivered// so go back and look again for a pending message without waiting.nextPollTimeoutMillis = 0;} } 復制代碼

下面繼續介紹enqueueMessage,入隊操作由Handler.class執行。后文提到其中幾種入隊操作。

boolean enqueueMessage(Message msg, long when) {if (msg.target == null) {throw new IllegalArgumentException("Message must have a target.");}if (msg.isInUse()) {throw new IllegalStateException(msg + " This message is already in use.");}synchronized (this) {//如果looper已經條用quit,那么就放棄入隊。if (mQuitting) {IllegalStateException e = new IllegalStateException(msg.target + " sending message to a Handler on a dead thread");Log.w(TAG, e.getMessage(), e);msg.recycle();return false;}msg.markInUse();msg.when = when;Message p = mMessages;boolean needWake;if (p == null || when == 0 || when < p.when) {// New head, wake up the event queue if blocked.// 如果messagequeue中沒有message或者需要立即執行或者插入message時間優于對頭// message所需要執行時間,那么就把msg插入到對頭。msg.next = p;mMessages = msg;needWake = mBlocked;} else {// Inserted within the middle of the queue. Usually we don't have to wake// up the event queue unless there is a barrier at the head of the queue// and the message is the earliest asynchronous message in the queue.//通常情況下將目標message插入到隊里中間時,是不需要喚醒隊列的,//除非有一個"同步分隔欄"在對頭或者目標message是最早需要執行的異步message。needWake = mBlocked && p.target == null && msg.isAsynchronous();Message prev;for (;;) {prev = p;p = p.next;if (p == null || when < p.when) {//找到最后一個位置,或者時間排序上晚于目標message的位置break;}//當需要喚醒,但是 要插入目標message的前面所有位置的message//只要有異步消息的話既不需要喚醒。if (needWake && p.isAsynchronous()) {needWake = false;}}// 將目標message插入到理想位置,修復整個鏈接msg.next = p; // invariant: p == prev.nextprev.next = msg;}// We can assume mPtr != 0 because mQuitting is false.if (needWake) {//此處為喚醒 LoopernativeWake(mPtr);}}return true; } 復制代碼

上面介紹了MessageQueue的兩個主要方法next()和enqueueMessage(),其中涉及到了兩個native層的本地方法分別為: nativePollOnce(ptr, nextPollTimeoutMillis); nativeWake(mPtr); 那么下面介紹一下這兩個方法。 方法在/frameworks/base/core/jni/android_os_MessageQueue.cpp中進行了定義。

static JNINativeMethod gMessageQueueMethods[] = {/* name, signature, funcPtr */{ "nativeInit", "()V", (void*)android_os_MessageQueue_nativeInit },{ "nativeDestroy", "()V", (void*)android_os_MessageQueue_nativeDestroy },{ "nativePollOnce", "(II)V", (void*)android_os_MessageQueue_nativePollOnce },{ "nativeWake", "(I)V", (void*)android_os_MessageQueue_nativeWake } }; 復制代碼static void android_os_MessageQueue_nativePollOnce(JNIEnv* env, jobject obj,jint ptr, jint timeoutMillis) {NativeMessageQueue* nativeMessageQueue = reinterpret_cast<NativeMessageQueue*>(ptr);nativeMessageQueue->pollOnce(timeoutMillis); } 復制代碼

最終調用到Looper::pollOnce====>Looper::pollInner

int Looper::pollOnce(int timeoutMillis, int* outFd, int* outEvents, void** outData); int Looper::pollInner(int timeoutMillis); 復制代碼int Looper::pollInner(int timeoutMillis) {--- #ifdef LOOPER_USES_EPOLLstruct epoll_event eventItems[EPOLL_MAX_EVENTS];//通過Epoll進行阻塞int eventCount = epoll_wait(mEpollFd, eventItems, EPOLL_MAX_EVENTS, timeoutMillis); #else// Wait for wakeAndLock() waiters to run then set mPolling to true.mLock.lock();while (mWaiters != 0) {mResume.wait(mLock);}mPolling = true;mLock.unlock();size_t requestedCount = mRequestedFds.size();int eventCount = poll(mRequestedFds.editArray(), requestedCount, timeoutMillis); #endif--- }復制代碼

其中最終運用epoll進行控制(epoll不再本文討論感興趣讀者可自行查詢! )。下面引入《深入理解Android:卷II》對pollOnce解釋:

其中四個參數: timeoutMillis參數為超時等待時間。如果值為–1,則表示無限等待,直到有事件發生為止。如果值為0,則無須等待立即返回。 outFd用來存儲發生事件的那個文件描述符。 outEvents用來存儲在該文件描述符上發生了哪些事件,目前支持可讀、可寫、錯誤和中斷4個事件。這4個事件其實是從epoll事件轉化而來的。后面我們會介紹大名鼎鼎的epoll。 outData用于存儲上下文數據,這個上下文數據是由用戶在添加監聽句柄時傳遞的,它的作用和pthread_create函數最后一個參數param一樣,用來傳遞用戶自定義的數據。 另外,pollOnce函數的返回值也具有特殊的意義,具體如下: 當返回值為ALOOPER_POLL_WAKE時,表示這次返回是由wake函數觸發的,也就是管道寫端的那次寫事件觸發的。 返回值為ALOOPER_POLL_TIMEOUT表示等待超時。 返回值為ALOOPER_POLL_ERROR表示等待過程中發生錯誤。 返回值為ALOOPER_POLL_CALLBACK表示某個被監聽的句柄因某種原因被觸發。這時,outFd參數用于存儲發生事件的文件句柄,outEvents用于存儲所發生的事件。

MessageQueue還有其他公開方法:

用來添加IdleHandler,當沒有message需要立即處理時就會處理IdleHandler。

void addIdleHandler(@NonNull IdleHandler handler); void removeIdleHandler(@NonNull IdleHandler handler); 復制代碼

用來添加需要監聽的文件描述符fd

void addOnFileDescriptorEventListener(@NonNull FileDescriptor fd,@OnFileDescriptorEventListener.Events int events,@NonNull OnFileDescriptorEventListener listener); void removeOnFileDescriptorEventListener(@NonNull FileDescriptor fd); 復制代碼

Message.class 主要是handler要處理的信使,主要功能攜帶參數。下面主要介紹handler參數。

/*** User-defined message code so that the recipient can identify * what this message is about. Each {@link Handler} has its own name-space* for message codes, so you do not need to worry about yours conflicting* with other handlers.*/ public int what; //定義在handler中要執行的事件/*** arg1 and arg2 are lower-cost alternatives to using* {@link #setData(Bundle) setData()} if you only need to store a* few integer values.*/ public int arg1; //如果要存儲簡單的參數,使用arg1和arg2就可以/*** arg1 and arg2 are lower-cost alternatives to using* {@link #setData(Bundle) setData()} if you only need to store a* few integer values.*/ public int arg2;/*** An arbitrary object to send to the recipient. When using* {@link Messenger} to send the message across processes this can only* be non-null if it contains a Parcelable of a framework class (not one* implemented by the application). For other data transfer use* {@link #setData}.* * <p>Note that Parcelable objects here are not supported prior to* the {@link android.os.Build.VERSION_CODES#FROYO} release.*/ public Object obj; //可存儲任意類型參數/*** Optional Messenger where replies to this message can be sent. The* semantics of exactly how this is used are up to the sender and* receiver.*/ public Messenger replyTo; //可實現跨進程通信,后面會獨立章節進行講解。/*** Optional field indicating the uid that sent the message. This is* only valid for messages posted by a {@link Messenger}; otherwise,* it will be -1.*/ public int sendingUid = -1; //與Messenger 配合使用/*package*/ int flags; //0x00 非使用, 0x01被使用:當入隊和被回收的時候會設置為1 //0x10 表示為異步/*package*/ long when; //延遲執行時間/*package*/ Bundle data; //存儲一些復雜數據/*package*/ Handler target; //執行該message的handler/*package*/ Runnable callback; //hanlder執行該message時,如果有callback即執行該callback// sometimes we store linked lists of these things /*package*/ Message next; //保存鏈表 復制代碼

主要解析一下該函數

/** * Return a new Message instance from the global pool. Allows us to* avoid allocating new objects in many cases.*/ public static Message obtain() {//sPoolSync 同步鎖synchronized (sPoolSync) {//sPool指向鏈表的頭if (sPool != null) {Message m = sPool;sPool = m.next;m.next = null;m.flags = 0; // clear in-use flagsPoolSize--;//將sPool取出,并斷鏈return m;}}//如果鏈中沒有元素,重新分配return new Message(); }/*** Recycles a Message that may be in-use.* Used internally by the MessageQueue and Looper when disposing of queued Messages.*/ void recycleUnchecked() {// Mark the message as in use while it remains in the recycled object pool.// Clear out all other details.flags = FLAG_IN_USE;what = 0;arg1 = 0;arg2 = 0;obj = null;replyTo = null;sendingUid = -1;when = 0;target = null;callback = null;data = null;synchronized (sPoolSync) {//鏈表不會無限增長if (sPoolSize < MAX_POOL_SIZE) {next = sPool;sPool = this;sPoolSize++;//將該message插入頭部}} } 復制代碼

Handler 先比較前幾個Class, Handler比較簡單,成員只有以下幾個:

final Looper mLooper; final MessageQueue mQueue; final Callback mCallback; final boolean mAsynchronous; IMessenger mMessenger; 復制代碼

先看幾個比較重要的構造方法:

//常用的為無參構造形式 public Handler() {this(null, false); }//這是無參構造方法調用的真正構造方法, public Handler(Callback callback, boolean async) {//FIND_POTENTIAL_LEAKS//將此標志設置為true以檢測擴展的Handler類, 擴展的handler類如果不是靜態的匿名,本地或成員類, //則會產生泄漏。我們常見構造時的警告說明!至于消除警告方法一般是設置成靜態或弱引用。if (FIND_POTENTIAL_LEAKS) {final Class<? extends Handler> klass = getClass();if ((klass.isAnonymousClass() || klass.isMemberClass() || klass.isLocalClass()) &&(klass.getModifiers() & Modifier.STATIC) == 0) {Log.w(TAG, "The following Handler class should be static or leaks might occur: " +klass.getCanonicalName());}}//mLooper是來自于sThreadLocal中ThreadLocalMap中 通過調用線程ID存儲的looper,唯一mLooper = Looper.myLooper();if (mLooper == null) {throw new RuntimeException("Can't create handler inside thread that has not called Looper.prepare()");}//mqueue來自looper, 也唯一mQueue = mLooper.mQueue;mCallback = callback;//標示該handler發送的數據是否為異步數據。mAsynchronous = async; } 復制代碼

通過分析構造方法可驗證前文提到的 handler 僅對應一個looper MessageQueue,,翻過來不成立,也就是說會有多個handler綁定在同一個Looper中。

通過調用post(Runnable r); postDelayed(Runnable r, long delayMillis);sendMessage(Message msg);等方法發送的時間,最終調用下面的方法。

public boolean sendMessageAtTime(Message msg, long uptimeMillis) {MessageQueue queue = mQueue;if (queue == null) {RuntimeException e = new RuntimeException(this + " sendMessageAtTime() called with no mQueue");Log.w("Looper", e.getMessage(), e);return false;}return enqueueMessage(queue, msg, uptimeMillis); }private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {msg.target = this;//如果為異步,則對每一個message進行設置。if (mAsynchronous) {msg.setAsynchronous(true);}//調用enqueueMessage 進行入隊Messagereturn queue.enqueueMessage(msg, uptimeMillis); } 復制代碼

還有另外一種入隊方法,需要介紹:

public final boolean sendMessageAtFrontOfQueue(Message msg) {MessageQueue queue = mQueue;if (queue == null) {RuntimeException e = new RuntimeException(this + " sendMessageAtTime() called with no mQueue");Log.w("Looper", e.getMessage(), e);return false;}//與enqueueMessage差別為uptimeMillis=0. 在messagequeue中當遇到when=0時,//會將該message放在對頭進行處理return enqueueMessage(queue, msg, 0); } 復制代碼

在需要注意下,這個remove方法,當傳入null時可將MessageQueue中的所有數據remove掉。

public final void removeCallbacksAndMessages(Object token) {mQueue.removeCallbacksAndMessages(this, token);} 復制代碼

回過頭來說一下上面的 同步分隔欄,

在Api 23 之, 通過MessageQueue 進行調用

/*** Posts a synchronization barrier to the Looper's message queue.** Message processing occurs as usual until the message queue encounters the* synchronization barrier that has been posted. When the barrier is encountered,* later synchronous messages in the queue are stalled (prevented from being executed)* until the barrier is released by calling {@link #removeSyncBarrier} and specifying* the token that identifies the synchronization barrier.** This method is used to immediately postpone execution of all subsequently posted* synchronous messages until a condition is met that releases the barrier.* Asynchronous messages (see {@link Message#isAsynchronous} are exempt from the barrier* and continue to be processed as usual.** This call must be always matched by a call to {@link #removeSyncBarrier} with* the same token to ensure that the message queue resumes normal operation.* Otherwise the application will probably hang!** @return A token that uniquely identifies the barrier. This token must be* passed to {@link #removeSyncBarrier} to release the barrier.** @hide*/// 該方法為hide, 正常寫代碼是調用不到的。 public int postSyncBarrier() {return postSyncBarrier(SystemClock.uptimeMillis()); }// The next barrier token. // Barriers are indicated by messages with a null target whose arg1 field carries the token. // 同步分隔欄消息沒有target, 并且arg1用來記錄token private int mNextBarrierToken;private int postSyncBarrier(long when) {// Enqueue a new sync barrier token.// We don't need to wake the queue because the purpose of a barrier is to stall it.synchronized (this) {final int token = mNextBarrierToken++;final Message msg = Message.obtain();msg.markInUse();msg.when = when;msg.arg1 = token;Message prev = null;Message p = mMessages;if (when != 0) {while (p != null && p.when <= when) {prev = p;p = p.next;}}if (prev != null) { // invariant: p == prev.nextmsg.next = p;prev.next = msg;} else {msg.next = p;mMessages = msg;}return token;} } 復制代碼

這個同步分隔message有什么作用呢? 對開發者沒有明顯的提供,那么就是在系統及別使用。在ViewRootImpl.java中進行了使用。

void scheduleTraversals() {if (!mTraversalScheduled) {mTraversalScheduled = true;mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier();mChoreographer.postCallback(Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null);if (!mUnbufferedInputDispatch) {scheduleConsumeBatchedInput();}notifyRendererOfFramePending();pokeDrawLockIfNeeded();} } 復制代碼

為了讓View能夠有快速的布局和繪制,ViewRootImpl在開始measure和layout ViewTree時,會向主線程的Handler添加同步分隔message,這樣后續的消息隊列中的同步的消息將不會被執行,以免會影響到UI繪制,但是只有異步消息才能被執行。如果想要使用postSyncBarrier() 那么就需要使用反射進行使用。

總結 Looper、MessageQueue 和 Thread 一一對應。 Handler 需要綁定到一個Looper中, 一個Looper可以有多個Handler。

這是第一文章,以后會多多寫的。歡迎各位指正問題!謝謝。 sy_dqs@163.com

轉載于:https://juejin.im/post/5ae841a451882567336a84a9

總結

以上是生活随笔為你收集整理的小葵花妈妈课堂开课了:《Handler Looper Message 浅析》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

精品国产免费久久 | 亚洲一二三区精品 | 麻豆视频在线免费观看 | 亚洲一区二区三区四区在线视频 | 九九涩涩av台湾日本热热 | 亚洲精品午夜久久久久久久久久久 | 日韩欧美在线观看一区二区三区 | 国产精品第一 | 成人久久精品视频 | 婷婷丁香色综合狠狠色 | 91网在线看 | 超碰在线网 | 91av片| 激情视频久久 | 激情五月在线 | 国产中文字幕免费 | 亚洲午夜精品一区二区三区电影院 | 亚洲国产精品传媒在线观看 | 又色又爽又激情的59视频 | 波多野结衣一区二区三区中文字幕 | 99精品免费久久久久久久久日本 | 久久精品国产免费看久久精品 | 麻花豆传媒mv在线观看网站 | 免费网站看av片 | 色综合天天视频在线观看 | 亚洲一区二区三区精品在线观看 | 亚洲色五月| 亚洲视频中文 | 九九热中文字幕 | 久久高清av | 国产成人一区二区三区免费看 | 国产精品色 | 91在线免费公开视频 | 精品毛片一区二区免费看 | 精品99在线观看 | 国产精品原创视频 | 国内精品久久久久久久久 | 国产视频一二区 | 丁香花在线观看免费完整版视频 | 麻豆精品视频在线观看免费 | 国产精成人品免费观看 | 天天射综合网站 | 久久精品一 | 国产国产人免费人成免费视频 | 91av视频网站 | 狠狠操夜夜操 | 97爱爱爱| 亚洲,国产成人av | 免费久久99精品国产婷婷六月 | 999久久久久久 | 超碰人人草人人 | 亚洲日本黄色 | 黄色毛片视频免费观看中文 | 97热在线观看 | 天堂资源在线观看视频 | 日韩av播放在线 | 欧美一区二区视频97 | 中文字幕日本特黄aa毛片 | 亚洲激情 | 亚洲精品国产区 | 国产福利精品视频 | 在线亚洲小视频 | 久久精品综合网 | 99精品成人| 在线免费观看黄色小说 | 在线观看亚洲精品 | 狠狠干天天 | 午夜av免费看 | 国产高清日韩欧美 | 亚洲区视频在线观看 | 天堂在线一区二区三区 | 久久黄色网址 | 丁香五婷 | 国产精品自产拍在线观看蜜 | 婷婷色伊人 | 亚洲电影免费 | 成人免费网站视频 | 国产午夜三级一区二区三桃花影视 | 99精品成人| 亚洲第一久久久 | 综合色婷婷 | 欧美日韩视频在线观看一区二区 | 国产精品免费av | 在线观看www. | 九九国产视频 | 国产精品免费视频久久久 | 亚洲 欧美 综合 在线 精品 | 97国产精品视频 | 亚洲免费av网站 | 激情网综合 | 天天插天天色 | 西西444www大胆无视频 | 国产午夜三级 | 一区在线免费观看 | 日韩欧美在线观看一区二区三区 | 久久社区视频 | 亚洲 欧洲av| 中文字幕在线日 | 99re久久资源最新地址 | 青青河边草手机免费 | 欧美激情第一区 | 在线国产专区 | 精品欧美一区二区在线观看 | 久草色在线观看 | 在线观看国产日韩欧美 | 成人在线视频免费看 | 日韩在线免费不卡 | 1000部18岁以下禁看视频 | 久草热视频 | 欧美日韩国产亚洲乱码字幕 | 亚洲伊人第一页 | 国产精品美女久久久久aⅴ 干干夜夜 | 中文字幕av在线 | 91在线欧美 | 日韩av免费在线看 | 久久久久久久久久久网 | 国产精品第二页 | 日本3级在线观看 | 国产一区二区三区在线 | 91精品视频免费看 | 日本性久久 | 伊人伊成久久人综合网站 | 久久精品久久久久久久 | 激情婷婷亚洲 | 91成人区 | 久久精品爱爱视频 | 国产高清中文字幕 | 欧美一级性生活 | 国产裸体永久免费视频网站 | av一区二区三区在线播放 | 日韩免费在线网站 | 日本中文字幕在线观看 | 欧美性爽爽 | 天天干夜夜夜 | 啪啪肉肉污av国网站 | 九九久久影视 | 国产麻豆精品一区二区 | 中文字幕在线观看av | 亚洲综合欧美日韩狠狠色 | 久久综合狠狠狠色97 | 男女日麻批| 乱子伦av| 五月天激情婷婷 | 久久99精品久久久久久 | 久久超碰网 | 国产一区二区在线免费播放 | 18岁免费看片 | 黄a在线看| av一区二区三区在线观看 | 亚洲视频六区 | 日韩精品专区 | 免费大片黄在线 | 香蕉视频日本 | 天天射天天搞 | 国产精品免费高清 | 免费色视频网址 | 国产97视频在线 | 亚洲激情视频在线 | 中文字幕在线观看第一区 | 五月婷婷六月丁香 | 婷婷免费在线视频 | 成年人看片网站 | 88av网站 | 亚洲精品在线电影 | 久久夜色电影 | 久久综合偷偷噜噜噜色 | 国产一级二级在线观看 | 一本色道久久综合亚洲二区三区 | 久章草在线 | 综合网五月天 | 午夜精品久久久久久久99水蜜桃 | 久久久久国产一区二区三区 | 99精品观看| 国产精品免费大片视频 | 国产理论免费 | 亚洲黄色在线 | 粉嫩av一区二区三区四区五区 | 中文字幕在线免费97 | 麻豆 videos | 久久手机看片 | 色综合久久99 | 天天激情综合网 | 国产在线黄 | av五月婷婷| 国产录像在线观看 | 日韩精品久久久久久久电影99爱 | 97超碰影视 | 久久精品欧美一区二区三区麻豆 | 欧美一级久久 | 国产日产av | 91成人免费视频 | 国产第一福利 | 国产a级免费 | 嫩草伊人久久精品少妇av | 欧美色图另类 | 成人免费观看完整版电影 | 久久激五月天综合精品 | 蜜桃av久久久亚洲精品 | www.神马久久 | 欧美日韩一区二区免费在线观看 | 97视频久久久 | av电影在线不卡 | 免费日韩一区二区三区 | 一区二区三区日韩在线 | 精品女同一区二区三区在线观看 | 国产视频一区二区三区在线 | 一区视频在线 | 在线成人av | 午夜av免费看 | 久久艹艹| 久久 在线 | 色偷偷888欧美精品久久久 | 日韩欧美一区二区三区在线 | 99精品福利| 中文字幕在线看视频国产 | 久久精品草 | 久久视频在线 | 国产福利资源 | se视频网址 | 国内成人精品2018免费看 | 国产亚洲欧美精品久久久久久 | 日韩一区二区三区高清免费看看 | 欧美性色xo影院 | 99久久精品无码一区二区毛片 | 狠狠色丁香婷婷综合基地 | 黄色小说视频网站 | 西西www444| 久久99精品久久久久蜜臀 | 午夜av一区二区三区 | 欧美一级片免费播放 | 久久9999久久免费精品国产 | 国产伦精品一区二区三区… | 精品久久久久国产免费第一页 | 香蕉网在线观看 | 精品国产伦一区二区三区观看体验 | 最近2019好看的中文字幕免费 | 婷婷 综合 色 | 国产伦理久久精品久久久久_ | 视频在线观看入口黄最新永久免费国产 | 免费情缘 | 91成人精品在线 | 欧美网站黄色 | 91在线视频播放 | 日韩a级免费视频 | 国产精品涩涩屋www在线观看 | 国产乱对白刺激视频在线观看女王 | 日日操夜夜操狠狠操 | 久久视精品 | 欧美精品在线一区 | 最近中文字幕视频完整版 | 91片黄在线观看动漫 | 日韩精品免费一区二区三区 | 色综合久久88色综合天天人守婷 | 亚洲精品国产欧美在线观看 | 亚洲伦理精品 | 久久精品老司机 | 久久99久久99精品免观看粉嫩 | 一区二区三区视频 | 精品一二三四五区 | 国产成人亚洲精品自产在线 | 国产精品国产三级国产aⅴ入口 | 97在线视频免费播放 | 欧美精品日韩 | 国产九色在线播放九色 | 亚洲综合在 | 亚洲综合色播 | 色婷婷欧美 | 免费一级毛毛片 | 久久精品8| 色综合久久久久综合99 | 99精品国产福利在线观看免费 | 黄色在线观看免费网站 | 亚洲精品中文在线 | 国产无吗一区二区三区在线欢 | 色播五月婷婷 | 亚洲韩国一区二区三区 | a天堂一码二码专区 | 日日夜夜精品视频天天综合网 | 久久综合婷婷综合 | 成人午夜在线电影 | 黄色av网站在线免费观看 | 午夜av在线 | 97人人看 | 国产精品久久久久久久毛片 | 成人蜜桃网 | 91成人免费观看视频 | 国产精品亚洲成人 | 9999国产精品| 中国一级特黄毛片大片久久 | 精品亚洲免费视频 | 久久国产品 | 日产av在线播放 | 永久av免费在线观看 | 国产日韩在线一区 | 亚洲日本国产精品 | 福利网址在线观看 | 99免费在线播放99久久免费 | 在线不卡a | av字幕在线 | 97视频入口免费观看 | 国产精品99久久久久久武松影视 | 正在播放国产一区二区 | 人人爽久久涩噜噜噜网站 | 色av婷婷 | 伊人久久国产 | 黄色小说视频在线 | 成人午夜电影久久影院 | 91在线观看黄 | 国产福利91精品张津瑜 | 国产视频1区2区 | 国产成人精品一区二区三区在线 | 日本黄色免费在线观看 | 免费看污在线观看 | 娇妻呻吟一区二区三区 | 日本久久成人 | 日韩色高清 | 国产精品久久久久免费观看 | 国产淫片免费看 | 狠狠躁天天躁综合网 | 亚洲午夜久久久久 | 欧美日韩一区二区视频在线观看 | 亚洲精品国产自产拍在线观看 | 91精品国产入口 | 国产精品av在线免费观看 | 欧美精品一区在线发布 | 午夜精品一区二区三区在线视频 | 亚洲视频2| 亚洲国产成人在线播放 | 天天操天天吃 | 亚洲精品激情 | 91色国产| 日韩视频在线观看免费 | 欧美成年人在线观看 | 91女子私密保健养生少妇 | 国产亚洲精品成人 | 免费看av在线 | 婷婷色视频 | 亚洲国产资源 | 国产女人18毛片水真多18精品 | 中文字幕资源网在线观看 | 欧美精品一区在线 | 黄色的片子 | 欧美日韩xxxxx | 黄色一级在线视频 | 中文字幕久久久精品 | 国产区精品在线观看 | 国产精品va在线观看入 | 日韩高清精品免费观看 | 国产一级在线观看 | 日韩系列 | 亚洲精品久久久久中文字幕m男 | 91九色网站| 欧美在线观看小视频 | 天堂网一区二区 | 黄色大全免费网站 | 婷婷激情欧美 | 午夜色大片在线观看 | 精品国产伦一区二区三区 | 一区二区三区在线观看免费视频 | 久久国产精品免费一区 | 国产精品精品久久久 | 天天插天天操天天干 | 麻花豆传媒mv在线观看网站 | 97夜夜澡人人双人人人喊 | 国产精品永久在线 | 香蕉日日 | 99精品国产99久久久久久福利 | 久久国产精品久久精品国产演员表 | 久久a v电影 | 国产在线日本 | 国产精品 欧美 日韩 | 激情五月婷婷 | 国产97av| 国产一区二区在线精品 | 九九精品视频在线看 | 中文字幕在线播放av | 手机在线看a | 91av手机在线 | 国产免费黄视频在线观看 | 国产一区二区高清不卡 | www色网站 | 国产一级大片免费看 | 欧美激情片在线观看 | 国产精品久久一区二区无卡 | 手机色在线| 亚州欧美视频 | 麻豆一区二区三区视频 | 欧美一区二区三区在线看 | 久久伊人八月婷婷综合激情 | 国产色在线视频 | 免费观看一级成人毛片 | 中文字幕一区在线 | a久久久久久| 婷婷六月天天 | 日精品 | 91在线一区 | 人人干人人干人人干 | 久久久久久久久久久高潮一区二区 | 久久电影中文字幕视频 | 成人网看片 | www.夜夜夜 | 中文字幕日韩在线播放 | 成人久久久精品国产乱码一区二区 | 国产理伦在线 | 精品一区二区三区久久 | 成人av免费播放 | 婷香五月 | 天天se天天cao天天干 | 在线色亚洲 | 日韩午夜在线播放 | 国产综合91 | 天天添夜夜操 | 日韩成人精品一区二区 | 国产精品成人免费一区久久羞羞 | 成人一级影视 | 香蕉成人在线视频 | 欧美a级片免费看 | 天堂麻豆| 深爱激情综合网 | 亚洲在线日韩 | 免费观看福利视频 | 亚洲精品美女 | 欧美亚洲国产日韩 | 国产又黄又爽无遮挡 | 三级黄免费看 | 欧美精品少妇xxxxx喷水 | 97超碰在线免费 | 激情综合网天天干 | 在线观看国产成人av片 | 国产午夜精品视频 | 99热这里只有精品国产首页 | 韩国一区视频 | 国产视频久久久 | 97成人精品视频在线播放 | 国产91电影在线观看 | 天天操天天插 | 欧美激情综合五月色丁香 | 久草网在线观看 | 午夜av在线播放 | 狠狠狠色丁香综合久久天下网 | 国产成人黄色在线 | 亚洲精品欧美视频 | 又色又爽又黄 | 婷婷色视频 | 日日爽夜夜爽 | 久久永久免费 | 日韩性色 | 伊人激情综合 | 激情伊人 | 91亚洲夫妻| 在线国产日韩 | 久久精品国产久精国产 | 成人av av在线 | 日韩av伦理片 | 精品国产一区二区三区久久久 | 91精品国产亚洲 | 久久精品国产亚洲精品2020 | 91精品国产成| 欧美一区中文字幕 | 亚洲欧美色婷婷 | 中文字幕超清在线免费 | 成人午夜电影网站 | 亚洲欧美偷拍另类 | 国产精品一区二区美女视频免费看 | 日韩在线国产 | 天天爽夜夜爽精品视频婷婷 | 日本aa在线| 99精品视频播放 | 黄色小说网站在线 | 精品高清美女精品国产区 | 亚洲精品777 | 亚洲色图27p | 国产精品久久久久久久久久久久午 | 91九色精品 | 成年人在线观看免费视频 | 国产精品日韩久久久久 | 久久久久久久国产精品影院 | 999国内精品永久免费视频 | 久久久精品一区二区 | 99精品在线观看视频 | 精品久久久久久久久久久久久久久久 | 亚洲国产精品成人va在线观看 | 五月婷婷.com | 日韩久久精品一区二区 | 五月婷婷.com | 九九热av| 最新国产中文字幕 | 天天色天天上天天操 | 色婷婷丁香| 91精品久久久久久久久久入口 | 超碰97久久| 亚洲精品字幕在线观看 | 欧美日韩不卡一区二区 | 天天色天天综合 | 欧美久久久久 | 国内精自线一二区永久 | 日日爽视频 | 久久91久久久久麻豆精品 | 最近中文字幕国语免费高清6 | 天天干天天干天天干 | 伊人色综合久久天天 | 免费三级影片 | 成人久久久久 | 国产成人综合图片 | 丁香婷婷综合色啪 | 韩国在线一区二区 | 成人亚洲精品国产www | 九七在线视频 | 国内精品久久久久影院日本资源 | 欧美日韩亚洲在线观看 | 超碰在线观看97 | 日韩动漫免费观看高清完整版在线观看 | .国产精品成人自产拍在线观看6 | a黄色片在线观看 | 亚洲视屏一区 | 亚洲黄色免费在线看 | 久久黄色免费视频 | 国产婷婷视频在线 | 在线观看精品黄av片免费 | 在线观看视频一区二区三区 | 国产精品9999久久久久仙踪林 | www成人精品 | 欧美做受高潮1 | 亚洲日日夜夜 | 久久午夜精品视频 | 日韩欧美电影网 | 成人久久综合 | 国产精久久久久久久 | 五月婷婷六月丁香激情 | 亚洲撸撸 | 成人香蕉视频 | 99久久国产免费免费 | 国产精品麻豆果冻传媒在线播放 | 欧洲视频一区 | 91九色成人 | 日韩久久久久久久久久久久 | 97视频在线观看网址 | 久久久久久欧美二区电影网 | 91精品国产91久久久久 | 中文字幕一区二区三区乱码在线 | 丁香电影小说免费视频观看 | 精品99久久久久久 | 免费看的黄网站 | 中文在线a√在线 | 欧美另类交在线观看 | 色婷婷免费视频 | 日韩高清观看 | 国产在线观看网站 | 久精品视频免费观看2 | 国产不卡片 | 九九九在线 | 天天色天天上天天操 | 四虎国产精品成人免费影视 | 久久99热精品 | 亚洲欧美国产日韩在线观看 | 国产欧美在线一区二区三区 | 国产成人精品一区二区三区免费 | 亚洲午夜av | 99热精品免费观看 | 黄色精品在线看 | 狠狠插狠狠操 | 中文字幕欧美激情 | 久久久久二区 | 在线观看成人国产 | 精品国产中文字幕 | 成人一级在线观看 | 伊甸园av在线 | 丁香在线观看完整电影视频 | 婷婷久久国产 | 国产免费小视频 | 成年人视频免费在线播放 | 欧美性色19p | 亚洲精品中文字幕视频 | 天天操人人要 | 国产一区在线播放 | 国产人在线成免费视频 | 欧美在线视频免费 | 国产成人三级在线播放 | 婷婷综合视频 | 最新中文字幕 | 97国产一区 | 欧洲精品码一区二区三区免费看 | 99久久er热在这里只有精品15 | 亚洲日本在线一区 | 欧美午夜a | www.黄色片网站 | 成人国产电影在线观看 | 亚洲在线日韩 | 午夜在线免费视频 | 午夜久久久影院 | 日韩毛片在线一区二区毛片 | 久草在线视频国产 | 欧美激情va永久在线播放 | 免费亚洲一区二区 | 国产网站色 | 五月天激情视频在线观看 | 性色va| 玖玖玖国产精品 | 三上悠亚一区二区在线观看 | 九九爱免费视频在线观看 | 99精品欧美一区二区蜜桃免费 | 视频福利在线 | 日韩精品一区二区三区第95 | 激情综合网五月婷婷 | 99精品视频在线播放观看 | 日韩高清观看 | 亚洲永久精品在线观看 | 久久久精品国产免费观看一区二区 | av 一区二区三区四区 | 午夜三级毛片 | 日韩有码中文字幕在线 | 国产97在线观看 | 五月婷婷综合在线视频 | 中文字幕乱码电影 | 久久久久中文 | 亚州av网站大全 | 亚欧日韩成人h片 | 久久久久久久国产精品影院 | 国产精品观看视频 | 日韩精品一区二区三区高清免费 | 天天爽夜夜爽人人爽一区二区 | 欧美怡红院视频 | 97日日| 91在线免费观看网站 | 黄a在线观看 | 欧美国产91 | 国产精品国产精品 | 欧美日韩国产精品一区 | 夜夜爽夜夜操 | 中文字幕有码在线播放 | 91精品一区国产高清在线gif | 色综合久久久久久中文网 | 色婷婷综合视频在线观看 | 亚欧洲精品视频在线观看 | 久草精品网 | 亚洲精品乱码久久 | 久久在线免费 | av电影不卡在线 | 成人一级片免费看 | 97色婷婷| 欧美日韩国产二区三区 | 国产剧情在线一区 | www.夜夜操.com| 国产原创在线 | 日韩av片免费在线观看 | 成人av av在线 | 97在线观看免费观看 | 激情开心 | 久久综合精品国产一区二区三区 | 嫩草伊人久久精品少妇av | 久久不射影院 | 国产999精品久久久影片官网 | 午夜精品久久久99热福利 | 久久电影网站中文字幕 | 涩涩在线 | 69av在线视频| 国产精品高清在线观看 | 国产韩国日本高清视频 | 91激情在线视频 | 免费高清在线视频一区· | 色狠狠久久av五月综合 | 韩国精品视频在线观看 | 国产手机在线精品 | 欧美一级小视频 | 91在线网站| 91在线免费播放视频 | 337p日本欧洲亚洲大胆裸体艺术 | 免费看的黄网站软件 | 久久亚洲免费视频 | 久久在线免费视频 | 中文字幕在线视频第一页 | 一区二区精品久久 | 四虎影视4hu4虎成人 | 久久久久久久久久久久久影院 | 综合色综合色 | 成人小视频免费在线观看 | 久久久久久免费网 | 天天伊人网 | avwww在线观看 | 99精品区 | 亚洲成人家庭影院 | 国产一级不卡视频 | 国产精品美女视频网站 | 午夜视频在线观看网站 | 国产精品乱码一区二区视频 | 亚洲国产午夜 | www91在线观看| 91激情在线视频 | 天天爱天天操天天干 | 日韩av线观看 | 国产高清不卡一区二区三区 | 麻豆手机在线 | 少妇资源站 | 99精品在线免费观看 | 成人午夜剧场在线观看 | 久久精品人人做人人综合老师 | 久久精久久精 | 狠狠色噜噜狠狠 | 干狠狠 | 国产人成精品一区二区三 | 婷婷精品在线 | 中文字幕中文字幕在线中文字幕三区 | 国产精品18久久久久久不卡孕妇 | 国产爽视频 | 成人免费视频a | 色婷婷激情五月 | 欧美日韩免费网站 | av中文字幕不卡 | 亚洲在线视频观看 | 久久线视频 | 久久精品国产v日韩v亚洲 | 国产精品麻豆视频 | 精品视频www| 亚洲日本va午夜在线影院 | 午夜视频一区二区 | 国产精品入口麻豆 | 中文字幕av在线电影 | 天天操天天色综合 | 在线中文字母电影观看 | 97视频在线 | 欧美大香线蕉线伊人久久 | 欧美精品午夜 | 久草精品视频 | zzijzzij亚洲成熟少妇 | 在线视频一区观看 | 日韩免费一二三区 | 国产精品高清av | 一区二区三区免费在线 | 国产美女在线免费观看 | 午夜成人免费电影 | 精品一区二区三区久久 | www.黄色网.com| 黄色免费在线看 | 国产一区二区久久 | 一区电影| 91九色在线 | 欧美精品久久久久久久免费 | 欧美日韩国产综合一区二区 | 国产黄色片久久久 | 国产一级在线免费观看 | 日韩精品一区二 | 色婷婷欧美 | 五月天综合网站 | 日日干日日操 | 日韩毛片在线一区二区毛片 | 午夜精品一区二区三区在线 | 五月婷婷中文 | 国产91粉嫩白浆在线观看 | 色偷偷88888欧美精品久久 | 欧美另类xxxx| 国产91精品一区二区麻豆亚洲 | 久久精品久久久久久久 | 久久久久99999 | 五月天电影免费在线观看一区 | 日日干夜夜草 | 99精品国产99久久久久久福利 | 天天操天天色天天 | 久久8精品| 亚洲精色| 久久国产精品影视 | 国产日韩欧美中文 | 亚洲第一伊人 | 亚洲综合视频在线观看 | 干干干操操操 | 91视频在线国产 | 欧美一级片在线观看视频 | 久久亚洲在线 | 国产精品欧美一区二区 | 国产免费一区二区三区最新 | 在线性视频日韩欧美 | 人人干,人人爽 | 久久久久久久久久久电影 | 99国产成+人+综合+亚洲 欧美 | 国产在线观看xxx | 91av中文字幕| 国产激情小视频在线观看 | 丁香久久五月 | 国产亚洲一区二区在线观看 | 看片网站黄色 | 狠狠色网 | 久久成人精品电影 | 成人久久免费视频 | 狠狠狠狠干 | 久久精品国产一区二区 | 国产成人专区 | 国产在线高清 | 国产免费xvideos视频入口 | 欧美成人va | 亚洲精品电影在线 | 国产情侣一区 | 欧美一级裸体视频 | 日韩免费中文字幕 | 91精品啪在线观看国产81旧版 | 91精品啪在线观看国产线免费 | 免费av网站在线看 | 欧美日韩精品电影 | 久久久国产精华液 | 天天操天天艹 | 国产欧美综合在线观看 | 成人精品99 | 99久久精品日本一区二区免费 | av黄色大片 | 懂色av懂色av粉嫩av分享吧 | 91av久久 | 青青久草在线 | 亚洲经典视频在线观看 | 亚洲精品网页 | 亚洲国产综合在线 | 国产精品久久久久影院 | 欧美a性| 婷婷色吧 | 国产精品成人久久久久 | www免费网站在线观看 | 国产日韩三级 | 在线观看色网 | 最近日本mv字幕免费观看 | 中文在线免费看视频 | 在线观看成人 | 91人人揉日日捏人人看 | 伊甸园永久入口www 99热 精品在线 | 国产精品成人a免费观看 | 999成人| 毛片网站免费在线观看 | 亚洲做受高潮欧美裸体 | 日韩在线观看小视频 | 国产精品嫩草影院99网站 | 国产精品嫩草69影院 | 91精品办公室少妇高潮对白 | 国产手机av在线 | 婷婷丁香六月天 | 国产成人精品一区二区在线观看 | 一区二区丝袜 | 超碰免费公开 | 91免费日韩| 欧美一区二区在线刺激视频 | 97超碰成人 | 亚洲国产手机在线 | 精品国产一二三 | 免费观看一级视频 | 国产黑丝一区二区三区 | 国产一线天在线观看 | 在线观看视频在线观看 | 国产小视频在线播放 | 成人免费观看在线视频 | 欧洲一区二区三区精品 | 97精品国产97久久久久久久久久久久 | 日本中文在线播放 | 日本成人黄色片 | 草久久久久久 | 成人h电影 | 欧美综合在线观看 | 欧美性极品xxxx做受 | 午夜影院一级 | 玖玖999 | 国产精品久久在线 | 中文字幕欧美日韩va免费视频 | av免费观看网站 | 精品久久久久久国产91 | 亚洲国产精品成人综合 | 在线观看www91 | 九九久久免费 | 亚洲国产福利视频 | 黄色国产区 | 国产理论在线 | 国产伦理一区二区三区 | 香蕉网在线观看 | 999视频精品 | 热久久电影 | 欧美性爽爽 | 综合亚洲视频 | 久久午夜国产 | av电影不卡 | 精品国产一区二区三区在线观看 | 免费在线观看污 | 99视频99 | 久久99热国产 | 精品国产乱码久久久久久天美 | 日日天天狠狠 | 在线看小早川怜子av | 欧美精品被 | 7799av | 午夜精品久久久久 | 视频在线观看入口黄最新永久免费国产 | 在线观看日本韩国电影 | 特级西西444www大胆高清无视频 | 成人黄色在线电影 | 91精品麻豆| 日韩一级片大全 | 中文成人字幕 | 麻豆高清免费国产一区 | 亚洲理论片 | 国产四虎影院 | 97激情影院 | 干天天 | 欧美日韩午夜爽爽 | 中文字幕乱在线伦视频中文字幕乱码在线 | 久久露脸国产精品 | 成人免费xxx在线观看 | av九九九| 在线成人性视频 | 国产三级久久久 | 看黄色91| 97在线观看免费高清完整版在线观看 | 久久综合精品国产一区二区三区 | 一区二区三区国产欧美 | 亚洲精品视频在线播放 | 日韩特黄一级欧美毛片特黄 | 欧美午夜久久 | 黄色福利网站 | 国产一级片免费观看 | 六月激情丁香 | 91视频电影 | 国产精品网红直播 | 五月天综合激情 | 中文亚洲欧美日韩 | 日韩精品免费在线观看视频 | 国产呻吟在线 | 天天草视频 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 精品一二三区视频 | 不卡国产在线 | 欧美日韩国产在线精品 | 黄色av一级片 | 国产成人777777 | 99精品视频网站 | 国产精品一区二区三区99 | 黄色a视频 | 日韩爱爱片| 欧美日韩免费一区 | 97视频在线观看成人 | 黄色成人在线 | 久久只精品99品免费久23小说 | 欧美日本在线视频 | av大全在线免费观看 | 九色91在线视频 | 婷婷久久婷婷 | 亚洲免费资源 | 免费在线观看av不卡 | 国产视频1| 日韩字幕在线 | 在线播放 日韩专区 | 精品国产一区二区三区久久久蜜月 | 天天操综合网 | 97超碰人人在线 | 欧美亚洲精品在线观看 | av在线播放国产 | 91在线视频在线观看 | 国产精品乱看 | 在线观看亚洲电影 | 五月婷婷影院 | 97视频播放 | 精品在线观看一区二区三区 | 亚洲高清网站 | 五月天激情在线 | 久久精品五月 | 亚洲视频精品 | 91精品色 | 超碰97人 | 黄视频网站大全 | 中文字幕在线视频第一页 | 亚洲一区不卡视频 | 久久久国产一区 | 在线最新av | 日韩av免费一区二区 | 欧美日韩免费一区二区 | 国产超碰在线 | 国内精品久久久久影院优 | 一区三区视频在线观看 | 正在播放 久久 | 色欧美日韩| www狠狠操 | 一级国产视频 | 亚洲涩涩涩 | 一级片免费视频 | 欧美日韩在线观看一区二区三区 | 天天干人人干 | 日韩二区在线观看 | 日韩网站在线播放 | 最近日韩中文字幕中文 | 国产一区在线免费观看 | 欧美日韩国产伦理 | 超碰97国产 | 中文字幕国产一区二区 | 欧美日韩国产免费视频 | 色综合天天天天做夜夜夜夜做 | 精品高清视频 | 观看免费av | 亚洲欧美成人在线 | 亚洲 欧洲av | 欧美精品中文字幕亚洲专区 | 黄色91在线观看 | 狠狠色伊人亚洲综合网站野外 | av超碰在线观看 | 国产久视频 | 中文字幕欧美日韩va免费视频 | 国产精品福利在线 | 天堂av在线网 | 国产精品白丝jk白祙 |