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

Android開發(fā)中Handler同步屏障機(jī)制(sync barrier)詳解

移動開發(fā) Android
在創(chuàng)建Message對象時調(diào)用Message的setAsynchronous()方法。在一般情況下,異步消息和同步消息沒有什么區(qū)別,但開啟了同步屏障以后就有區(qū)別了。

Handler同步屏障機(jī)制是Android開發(fā)中一個較為高級且復(fù)雜的特性,主要用于控制消息隊列MessageQueue中消息的處理順序。當(dāng)設(shè)置同步屏障時,會阻止所有普通消息(同步消息)的處理,同時允許立即消息(例如帶回調(diào)的消息或Runnable對象)繼續(xù)執(zhí)行。

「消息分類」:

  • 「普通消息(同步消息)」:常見的通過Handler發(fā)送的消息,按照時間戳順序在MessageQueue中排隊。我們平時發(fā)的消息基本都是同步消息,在這里不做討論。
  • 「屏障消息(同步屏障)」:一個特殊的Message對象,沒有target屬性,用于在MessageQueue中插入屏障。
  • 「異步消息」:可以通過特定方式標(biāo)記的消息,優(yōu)先級高于同步消息,即使存在同步屏障也能被處理。

屏障消息(同步屏障)

同步屏障是通過MessageQueue的postSyncBarrier方法開啟。

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.next
            msg.next = p;
            prev.next = msg;
        } else {
            msg.next = p;
            mMessages = msg;
        }
        return token;
    }
}
  • 第一步,獲取屏障的的唯一標(biāo)示,標(biāo)示從0開始,自加1。
  • 第二步,從Message消息對象池中獲取一個msg,設(shè)置msg為正在使用狀態(tài),并且重置msg的when和arg1,arg1的值設(shè)置為token值。但是這里并沒有給tareget賦值。所以msag的target是否為空是判斷這個msg是否是屏障消息的標(biāo)志。
  • 第三步,創(chuàng)建變量pre和p,為下一步做準(zhǔn)備。其中p被賦值為mMessages,mMessages指向消息隊列中的第一個元素,所以此時p指向消息隊列中的第一個元素。
  • 第四步,通過對隊列中的第一個Message的when和屏障的when進(jìn)行比較,決定屏障消息在整個消息隊列中的位置,因為消息隊列中的消息都是按時間排序的。
  • 第五步,prev != null,代表不是消息的頭部,把msg插入到消息隊列中。
  • 第六步,prev == null,代表是消息隊列的頭部,把msg插入消息的頭部。

通常通過Handler發(fā)送消息handler.sendMessage(),最終都會調(diào)用Handler.java中的enqueueMessage()方法。

private boolean enqueueMessage(@NonNull MessageQueue queue, @NonNull Message msg, long uptimeMillis) {
    msg.target = this;
    msg.workSourceUid = ThreadLocalWorkSource.getUid();

    if (mAsynchronous) {
        msg.setAsynchronous(true);
    }
    return queue.enqueueMessage(msg, uptimeMillis);
}

可以看到,enqueueMessage()方法里為msg設(shè)置了target字段。而postSyncBarrier()方法也是從Message消息對象池中獲取一個msg插入到消息隊列中,唯一的不同是沒有設(shè)置target字段,從代碼層面上講,屏障消息就是一個target為空的Message。

「工作原理」:Handler的消息處理是在Looper.loop()方法從消息隊列中獲取消息并交給Handler處理,其中是通過MessageQueue是通過next方法來獲取消息的。

Message next() {
    final long ptr = mPtr;
    if (ptr == 0) {
        return null;
    }

    int pendingIdleHandlerCount = -1; // -1 only during first iteration
    int nextPollTimeoutMillis = 0;
    for (;;) {
        if (nextPollTimeoutMillis != 0) {
            Binder.flushPendingCommands();
        }

        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) {
                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.
                    nextPollTimeoutMillis = (int) Math.min(msg.when - now, Integer.MAX_VALUE);
                } else {
                    // Got a message.
                    mBlocked = false;
                    if (prevMsg != null) {
                        prevMsg.next = msg.next;
                    } else {
                        mMessages = msg.next;
                    }
                    msg.next = null;
                    if (DEBUG) Log.v(TAG, "Returning message: " + msg);
                    msg.markInUse();
                    return msg;
                }
            } else {
                // No more messages.
                nextPollTimeoutMillis = -1;
            }
            if (mQuitting) {
                dispose();
                return null;
            }
            if (pendingIdleHandlerCount < 0 && (mMessages == null || now < mMessages.when)) {
                pendingIdleHandlerCount = mIdleHandlers.size();
            }
            if (pendingIdleHandlerCount <= 0) {
                // No idle handlers to run.  Loop and wait some more.
                mBlocked = true;
                continue;
            }

            if (mPendingIdleHandlers == null) {
                mPendingIdleHandlers = new IdleHandler[Math.max(pendingIdleHandlerCount, 4)];
            }
            mPendingIdleHandlers = mIdleHandlers.toArray(mPendingIdleHandlers);
        }
        for (int i = 0; i < pendingIdleHandlerCount; i++) {
            final IdleHandler idler = mPendingIdleHandlers[i];
            mPendingIdleHandlers[i] = null; // release the reference to the handler

            boolean keep = false;
            try {
                keep = idler.queueIdle();
            } catch (Throwable t) {
                Log.wtf(TAG, "IdleHandler threw exception", t);
            }

            if (!keep) {
                synchronized (this) {
                    mIdleHandlers.remove(idler);
                }
            }
        }
        pendingIdleHandlerCount = 0;
        nextPollTimeoutMillis = 0;
    }
}

msg.target == null時說明此時的msg是屏障消息,此時會進(jìn)入到循環(huán),遍歷移動msg的位置,直到移動到的msg是異步message退出循環(huán),也就是說循環(huán)的代碼會過濾掉所有的同步消息,直到取出異步消息為止。

當(dāng)設(shè)置了同步屏障之后,next函數(shù)將會忽略所有的同步消息,返回異步消息。設(shè)置了同步屏障之后,Handler只會處理異步消息。同步屏障為Handler消息機(jī)制增加了一種簡單的優(yōu)先級機(jī)制,異步消息的優(yōu)先級要高于同步消息。

「移除屏障」:屏障不會自動移除,需要手動調(diào)用MessageQueue.removeSyncBarrier(int token)方法移除。token是postSyncBarrier()方法返回的唯一標(biāo)識符。

public void removeSyncBarrier(int token) {
    // Remove a sync barrier token from the queue.
    // If the queue is no longer stalled by a barrier then wake it.
    synchronized (this) {
        Message prev = null;
        Message p = mMessages;
        // 循環(huán)遍歷,直到遇到屏障消息時推退出循環(huán)
        while (p != null && (p.target != null || p.arg1 != token)) {
            prev = p;
            p = p.next;
        }
        if (p == null) {
            throw new IllegalStateException("The specified message queue synchronization " + " barrier token has not been posted or has already been removed.");
        }
        final boolean needWake;
        if (prev != null) {
            // 刪除屏障消息p
            prev.next = p.next;
            needWake = false;
        } else {
            mMessages = p.next;
            needWake = mMessages == null || mMessages.target != null;
        }
        p.recycleUnchecked();

        // If the loop is quitting then it is already awake.
        // We can assume mPtr != 0 when mQuitting is false.
        if (needWake && !mQuitting) {
            nativeWake(mPtr);
        }
    }
}

刪除屏障消息的方法很簡單,就是不斷遍歷消息隊列,直到找到屏障消息,退出循環(huán)的條件有兩個p.target == null(說明是屏障消息)和p.arg1 == token(說明p是屏障消息,在屏障消息入隊的時候,設(shè)置過msg.arg1 = token)。找到屏障消息后,把它從消息隊列中刪除并回收。

異步消息

通常我們使用Handler想消息隊列中添加的Message都是同步的,如果我們想要添加一個異步的Message,有以下兩種方式:

  1. Handler的構(gòu)造方法有個async參數(shù),默認(rèn)的構(gòu)造方法此參數(shù)是false,只要在構(gòu)造handler對象的時候,把該參數(shù)設(shè)置為true。
public Handler(@Nullable Callback callback, boolean async) {
    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 = Looper.myLooper();
    if (mLooper == null) {
        throw new RuntimeException(
            "Can't create handler inside thread " + Thread.currentThread() + " that has not called Looper.prepare()");
    }
    mQueue = mLooper.mQueue;
    mCallback = callback;
    mAsynchronous = async;
    mIsShared = false;
}

async設(shè)置為true后,對全局的mAsynchronous設(shè)置為true。然后在enqueueMessage()調(diào)用msg.setAsynchronous(true)將message設(shè)置為異步的。

private boolean enqueueMessage(@NonNull MessageQueue queue, @NonNull Message msg, long uptimeMillis) {
    msg.target = this;
    msg.workSourceUid = ThreadLocalWorkSource.getUid();

    if (mAsynchronous) {
        msg.setAsynchronous(true);
    }
    return queue.enqueueMessage(msg, uptimeMillis);
}
  1. 在創(chuàng)建Message對象時調(diào)用Message的setAsynchronous()方法。在一般情況下,異步消息和同步消息沒有什么區(qū)別,但開啟了同步屏障以后就有區(qū)別了。
  • 當(dāng)Looper從MessageQueue中取出消息進(jìn)行處理時,如果遇到屏障消息,會跳過所有后續(xù)的普通消息,直到找到異步消息或屏障被移除。
  • 異步消息不受同步屏障的影響,可以直接被處理。

應(yīng)用場景

  1. 「確保立即任務(wù)優(yōu)先處理」:在需要優(yōu)先執(zhí)行某些緊急任務(wù)時,可以使用同步屏障暫時阻止其他消息的處理。
  2. 「避免死鎖和資源競爭」:在復(fù)雜的消息交互場景中,使用同步屏障可以防止因消息處理順序不當(dāng)引發(fā)的死鎖或資源競爭。
  3. 「UI繪制優(yōu)化」:在Android應(yīng)用框架中,為了更快地響應(yīng)UI刷新事件,ViewRootImpl在繪制流程中使用了同步屏障機(jī)制,確保異步繪制任務(wù)可以優(yōu)先執(zhí)行。

注意事項

  1. 「謹(jǐn)慎使用」:不恰當(dāng)?shù)氖褂猛狡琳峡赡軙?dǎo)致消息處理的延遲或阻塞,影響應(yīng)用性能和響應(yīng)能力。
  2. 「手動移除」:使用完同步屏障后,必須手動移除,否則會造成同步消息無法處理。
責(zé)任編輯:武曉燕 來源: 沐雨花飛蝶
相關(guān)推薦

2023-06-05 09:23:00

Golang同步工具

2023-06-06 08:28:58

Sync.OnceGolang

2023-06-26 08:28:35

Sync.CondGolang

2014-06-18 14:41:26

AndroidHandler總結(jié)

2021-11-24 08:33:09

Android廣播機(jī)制應(yīng)用程序

2024-04-18 08:27:05

Android數(shù)據(jù)類型

2012-05-25 09:09:25

Windows Pho

2009-03-24 08:56:23

數(shù)據(jù)同步多線程Java

2011-09-27 10:23:24

Java反射機(jī)制

2019-07-25 13:13:25

AndroidHandler消費(fèi)機(jī)制

2023-05-11 08:00:44

Golangsync.Pool

2015-01-14 13:50:58

AndroidHandler內(nèi)存泄露

2025-08-05 08:25:04

2023-12-25 09:58:25

sync包Go編程

2010-07-07 18:34:43

UML公共機(jī)制

2012-05-18 11:16:42

@Kroll注解詳解TitaniumAndroid模塊

2009-03-16 10:00:01

文件同步LivemeshSilverlight

2014-05-22 15:38:27

Android消息處理機(jī)制Looper

2014-05-22 15:04:00

Android消息處理機(jī)制Looper

2014-05-22 15:48:50

Android消息處理機(jī)制Looper
點贊
收藏

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

日韩二区三区| 精品国产一区二区三区四| 色妞ww精品视频7777| 亚洲高清免费观看高清完整版在线观看| 国产女人水真多18毛片18精品 | 性色av浪潮av| av最新在线| 国产精品久久午夜| 极品日韩久久| 一区二区三区日| 99热在线精品观看| 久久综合伊人77777| 少妇饥渴放荡91麻豆| 97久久中文字幕| 婷婷综合另类小说色区| 桥本有菜av在线| 四虎精品在线| 国产乱码精品一区二区三| 日韩美女在线播放| 劲爆欧美第一页| 不卡在线一区二区| 亚洲黄色片网站| 三日本三级少妇三级99| 婷婷综合六月| 婷婷国产在线综合| a级片一区二区| 自拍视频在线网| 99精品视频免费在线观看| 91社区国产高清| 狠狠狠狠狠狠狠| 亚洲激情av| 欧美精品日韩三级| 精品在线观看一区| 久久av免费看| 亚洲精美色品网站| 免费在线观看日韩av| 亚洲资源在线| 欧美亚洲国产一区二区三区va | 天堂一区二区在线| 欧美激情18p| 日韩精品123区| 99久久这里只有精品| 国产一区二区久久精品| 欧美 日本 国产| 久久97精品| 亚洲精品一区二区三区精华液 | 欧美成人激情图片网| 美国黑人一级大黄| 国产成人久久| 亚洲免费电影一区| 国产精品无码午夜福利| 日韩欧美黄色| 亚洲女人天堂成人av在线| 国产精品第七页| 老司机精品视频在线播放| 欧美电视剧在线看免费| 极品人妻一区二区| 亚洲午夜免费| 亚洲黄在线观看| 欧美肉大捧一进一出免费视频| 国产suv精品一区| 亚洲成人久久久久| 欧美大喷水吹潮合集在线观看| 国产精品传媒| 国产丝袜视频一区| 鲁丝一区二区三区| 色97色成人| 久久香蕉国产线看观看av| 色欲一区二区三区精品a片| 亚洲综合自拍| 欧美精品国产精品日韩精品| 国产第一页在线播放| 中文久久精品| 国产精品久久久久9999| 国产又粗又长又黄| 国产高清精品网站| 精品不卡在线| 你懂的免费在线观看视频网站| 国产午夜精品理论片a级大结局| 午夜午夜精品一区二区三区文| 91社区在线| 亚洲综合成人在线| av网站在线观看不卡| 91大神在线观看线路一区| 在线成人av网站| 男女性杂交内射妇女bbwxz| 日韩欧美黄色| 久久亚洲一区二区三区四区五区高 | 成人免费观看cn| 亚洲伦理影院| 日韩免费高清视频| a天堂中文字幕| 91精品国产91久久综合| 91av在线播放视频| 中文字幕视频二区| 粉嫩一区二区三区性色av| 欧美xxxx黑人又粗又长密月| 麻豆系列在线观看| 午夜伊人狠狠久久| 亚洲这里只有精品| 欧美18xxxx| 精品国产一区二区三区久久久狼| 国产精品成人aaaa在线| 毛片基地黄久久久久久天堂| 国产66精品久久久久999小说| 国产高清一区在线观看| 亚洲图片自拍偷拍| 亚洲国产精品三区| 久久久久97| y97精品国产97久久久久久| 国产情侣自拍av| 国产精品一品二品| 色噜噜色狠狠狠狠狠综合色一 | 国产91九色视频| 亚洲国产成人在线观看| 中文字幕免费一区| www国产精品内射老熟女| www.久久久.com| 一道本无吗dⅴd在线播放一区 | 亚洲а∨天堂久久精品2021| 精品1区2区3区4区| 91精品中文在线| 北条麻妃在线| 欧美性xxxx在线播放| 亚洲国产精品狼友在线观看| 午夜影院欧美| 国产精品入口福利| 免费a在线观看| 午夜精品久久久久久久| 无码人妻一区二区三区免费n鬼沢| 日韩av有码| 日韩av电影在线网| 性感美女视频一二三| 亚洲午夜电影网| 4438x全国最大成人| 66国产精品| 成人激情免费在线| 男人的天堂在线视频免费观看| 色综合网色综合| 大黑人交xxx极品hd| 夜夜嗨av一区二区三区网站四季av| 亚洲影院色无极综合| 欧洲不卡av| 欧美日韩国产小视频在线观看| 亚洲精品国产精品国自产网站| 久久久成人网| 日日噜噜噜噜夜夜爽亚洲精品| 欧洲av不卡| 国产一区二区三区视频在线观看| 国产成人精品777777| 97精品国产97久久久久久久久久久久| 国产毛片久久久久久国产毛片| 蜜桃精品一区二区三区| 久久6免费高清热精品| 国产黄色片网站| 亚洲午夜免费福利视频| 一区二区三区四区影院| 精品91在线| 狠狠爱一区二区三区| 一本大道色婷婷在线| 亚洲精品一区中文字幕乱码| 亚洲天堂一区在线| 久久久久久久久久美女| 可以免费在线看黄的网站| 日本电影一区二区| 成人黄色短视频在线观看| 国产婷婷视频在线| 欧美zozo另类异族| 国产成人精品片| 久久精品亚洲一区二区三区浴池| 看欧美ab黄色大片视频免费| 日韩久久精品网| 亚洲一区二区三区视频播放| 国产在线xxx| 日韩精品视频三区| 中文字幕乱码在线观看| 亚洲精品高清在线观看| 中文字幕在线播放一区| 三级一区在线视频先锋| 熟妇熟女乱妇乱女网站| 国产精品调教| 国产精品久久久久久av下载红粉 | 最新国产の精品合集bt伙计| 手机在线播放av| 亚洲欧美卡通另类91av| 亚洲精品国产精品国自产| 日韩精品一区二区三区中文| 91成人在线视频| 日韩黄色影院| 亚洲国产精品久久久| 中文av免费观看| 亚洲一线二线三线视频| 91视频免费观看网站| 狠狠色2019综合网| 女人天堂av手机在线| 久久美女精品| 久久99精品国产一区二区三区| 欧美成a人片免费观看久久五月天| 欧美猛交免费看| 国产精品ⅴa有声小说| 精品av久久707| 中文字幕在线视频免费| 午夜精品久久久久久久久久| 欧美手机在线观看| 久久久久久**毛片大全| 伊人av在线播放| 日韩1区2区3区| 亚洲人成无码网站久久99热国产| 久久视频在线| 久久99精品久久久久久青青日本| 国产一区2区在线观看| 欧美制服第一页| 女同一区二区免费aⅴ| 国产一区二区免费| 色视频在线观看福利| 日韩三级中文字幕| 中文字幕无线码一区| 精品国产户外野外| 欧美成人免费看| 国产精品伦理在线| 国产特黄级aaaaa片免| 国产成人精品影院| 天天摸天天舔天天操| 日日夜夜精品视频免费| 日韩一级片免费视频| 亚洲成人99| 一本一本a久久| 国产欧美一区二区精品久久久| 精品无人乱码一区二区三区的优势| 久久伊人影院| 91影视免费在线观看| 日日夜夜精品| 国产精品一区二区电影| a屁视频一区二区三区四区| 日韩美女av在线免费观看| av在线视屏| 久久久伊人欧美| 日韩精品亚洲人成在线观看| 久久电影一区二区| 成年人黄视频在线观看| 日韩视频免费看| 巨大荫蒂视频欧美大片| 久久精品成人一区二区三区 | 国产精品久久久久久久久免费桃花| 性欧美成人播放77777| 99久久精品免费观看| 亚洲成人av免费在线观看| 成人美女视频在线观看18| 成人欧美精品一区二区| 不卡的av电影在线观看| 又黄又色的网站| 99久久夜色精品国产网站| 亚洲精品第二页| 91日韩在线专区| 大又大又粗又硬又爽少妇毛片| 久久夜色精品一区| 久久久久久久久久久久| 亚洲国产高清不卡| 青青青视频在线免费观看| 1区2区3区精品视频| 色在线观看视频| 午夜影院久久久| 欧美一级片免费在线观看| 色婷婷激情一区二区三区| 一级特黄免费视频| 9191久久久久久久久久久| 国产乱码精品一区二区| 精品少妇一区二区三区免费观看| 国产成人自拍一区| 亚洲精品久久久久中文字幕欢迎你 | av资源吧首页| 欧美性高潮在线| 中文字幕免费在线看| 欧美一级在线视频| 日本xxxx人| 在线视频欧美日韩精品| 高h视频在线观看| 国内精品久久久久久久| 欧美电影免费观看高清完整| 国产欧美韩国高清| 欧美一级大片在线视频| 精品欧美国产一区二区三区不卡| 欧美一二区在线观看| 一本二本三本亚洲码| 国产一区二区三区久久久久久久久| 免费黄色一级网站| 国产99久久久精品| 国产真实乱人偷精品人妻| 亚洲欧美一区二区三区孕妇| 97超碰人人干| 欧美欧美午夜aⅴ在线观看| 农村少妇久久久久久久| 中日韩美女免费视频网站在线观看 | 欧美日韩国产精品激情在线播放| 男人的j进女人的j一区| 无码av免费精品一区二区三区| 日本一区二区视频在线观看| 久久久久黄色片| 色哟哟在线观看一区二区三区| 99草在线视频| 亚洲人成网站色ww在线| 日韩激情av| 国产区精品视频| 青青草这里只有精品| 法国空姐在线观看免费| 久久久久久9| 国产无套精品一区二区三区| 国产精品无遮挡| 国产成人无码一区二区三区在线| 在线成人小视频| 懂色av中文在线| 2020欧美日韩在线视频| 日韩精品免费视频一区二区三区| 亚洲国产一区二区精品视频| 亚洲乱亚洲高清| 熟妇女人妻丰满少妇中文字幕| 日本一区二区视频在线| 日韩精品成人在线| 欧美一级欧美三级| 亚洲s色大片| 国产精品黄视频| 西瓜成人精品人成网站| av免费看网址| 国产精品99久久久久久宅男| 蜜桃av免费观看| 日本高清视频一区二区| 少妇性bbb搡bbb爽爽爽欧美| 欧美精品www| 亚洲三级av| 亚洲小说欧美另类激情| 麻豆成人91精品二区三区| 免费福利视频网站| 日本乱码高清不卡字幕| 亚洲aⅴ乱码精品成人区| 国内精品久久久久影院 日本资源| 91精品视频一区二区| 杨幂一区欧美专区| 美女视频黄 久久| 中国1级黄色片| 欧美日韩精品系列| jizz在线免费观看| 国产精品视频在线播放| 欧美日韩国产在线观看网站| 777米奇影视第四色| 91日韩一区二区三区| 欧美a视频在线观看| 亚洲欧美在线免费| 欧美xo影院| 水蜜桃一区二区| 美女网站色91| 182在线观看视频| 欧美日本不卡视频| 韩国中文字幕在线| 91在线中文字幕| 国产综合色产| 亚洲天堂资源在线| 色综合久久天天综合网| 国产视频精选在线| 国产精品吹潮在线观看| 久久美女视频| 国产成人精品一区二区三区在线观看| 一区二区三区蜜桃| 日韩一级片免费观看| 青草青草久热精品视频在线观看| 免费不卡中文字幕在线| 日日噜噜噜噜久久久精品毛片| 中文字幕视频一区| av小说天堂网| 992tv成人免费影院| 国产一区二区三区91| 91精产国品一二三产区别沈先生| 亚洲免费观看高清在线观看| 黄色aaa毛片| 热re99久久精品国产66热| 成人一区二区| 一级全黄裸体片| 日韩欧美国产视频| 欧美三级理伦电影| 粉嫩av免费一区二区三区| 国产精品视频| 91n在线视频| 亚洲国产精品一区二区久| 日韩另类视频| 成人一区二区av| 国产视频亚洲色图| www.天堂在线| 国产成人极品视频| 一区二区三区午夜视频| 国产网站无遮挡| 69堂国产成人免费视频| 日本а中文在线天堂| 一级做a爰片久久| av资源网一区| 国产精品久久久午夜夜伦鲁鲁| 久久免费少妇高潮久久精品99| 精品亚洲成人| 在线免费观看a级片| 7777精品伊人久久久大香线蕉最新版| mm视频在线视频| 中国一区二区三区|