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

在Android系統中,一個Activity的Window創建和添加過程

移動開發 Android
addToDisplay?方法內部調用了mService的addWindow?方法,并將Session?對象本身作為第一個參數傳進去。mService?就是WMS?的實例,每一個app進程?都會對應一個Session對象用來表示app進程與WMS的通信渠道。

在Android系統中,一個Activity通常就表示一個頁面,這個頁面實際是由Window來管理的,每個Activity都對應著一個Window。Window是一個抽象類,具體實現類是PhoneWindow,對View進行管理。確切的來講是,PhoneWindow包含一個DecorView類型的成員,代表這個Window的頂層View,是一個FrameLayout。DecorView的布局結構包含兩部分:標題欄(title)和內容欄(content)。根據設置的主題不同,這兩部分也會有不同的呈現。但內容欄是一定存在的,并且id是固定的android.R.id.content。

Window的創建過程

Window的創建過程是一個涉及多個層次和組件的復雜過程。

  • 當啟動一個Activity或系統通過Intent觸發一個Activity時,這個Activity的生命周期開始。
  • onCreate()方法被調用,這是Activity生命周期中的一個重要回調。
  • 在onCreate()方法中,通常會調用setContentView()來設置Activity的布局。
  • setContentView()方法會觸發Window對象的創建。在Android中,每個Activity都與一個Window對象相關聯。
  • Window對象通常是一個PhoneWindow的實例,用于處理與窗口相關的各種功能。

Activity啟動過程在ActivityThread的performLaunchActivity方法,會調用Activity的attach方法。與Activity相關聯的Window對象就是在attach方法中創建的。

final void attach(Context context, ActivityThread aThread,
        Instrumentation instr, IBinder token, int ident,
        Application application, Intent intent, ActivityInfo info,
        CharSequence title, Activity parent, String id,
        NonConfigurationInstances lastNonConfigurationInstances,
        Configuration config, String referrer, IVoiceInteractor voiceInteractor,
        Window window, ActivityConfigCallback activityConfigCallback, IBinder assistToken) {
    attachBaseContext(context);
    ...
    mWindow = new PhoneWindow(this, window, activityConfigCallback);
    mWindow.setWindowControllerCallback(this);
    mWindow.setCallback(this);
    mWindow.setOnWindowDismissedCallback(this);
    mWindow.getLayoutInflater().setPrivateFactory(this);
    if (info.softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED) {
        mWindow.setSoftInputMode(info.softInputMode);
    }
    if (info.uiOptions != 0) {
        mWindow.setUiOptions(info.uiOptions);
    }
    ...
    mWindow.setWindowManager(
            (WindowManager)context.getSystemService(Context.WINDOW_SERVICE),
            mToken, mComponent.flattenToString(),
            (info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0);
     ...

    mWindow.setColorMode(info.colorMode);
}

在attach方法中創建了一個PhoneWindow對象,并設置回調接口Callback和WindowManager。由于Activity類實現了Window.Callback接口,當Window接收到相關的事件觸發時就會調用Activity的相應方法。Callback接口中的方法很多,有幾個是我們比較常見的,比如dispatchTouchEvent、onAttachedToWindow、onDetachedFromWindow等。

Window的添加過程

  • 與Window對象關聯的是一個DecorView。DecorView是一個特殊的ViewGroup,包含了窗口的標題欄(如果有的話)和主要內容區域。
  • DecorView的創建是在Window的創建過程中自動完成的,并且與Window對象緊密相關。
  • 通過setContentView()方法加載的布局文件(通常是XML文件)會被解析并轉換為相應的View對象。
  • 這些View對象被添加到DecorView的內容區域中,形成一個View樹。
  • 繪制的結果被渲染到屏幕上,就能看到Activity的界面了。

ActivityThread的performLaunchActivity方法:

private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
        ...
        activity.attach(appContext, this, getInstrumentation(), r.token,
                        r.ident, app, r.intent, r.activityInfo, title, r.parent,
                        r.embeddedID, r.lastNonConfigurationInstances, config,
                        r.referrer, r.voiceInteractor, window, r.configCallback);
        ...
        if (r.isPersistable()) {
                    mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState);
                } else {
                    mInstrumentation.callActivityOnCreate(activity, r.state);
                }
}

在Activity的attach方法返回后,程序會調用mInstrumentation.callActivityOnCreate方法,而這個方法最終會觸發Activity的onCreate回調。而在onCreate中,會調用setContentView方法,開始Activity的Window添加過程。

public void setContentView(@LayoutRes int layoutResID) {
    getWindow().setContentView(layoutResID);
    initWindowDecorActionBar();
}

Activity的setContentView方法內部調用的mWindow的setContentView方法,這個mWindow對象就是在attach方法中創建的PhoneWindow對象。

public void setContentView(int layoutResID) {
    if (mContentParent == null) {
        installDecor();
    } else if (!hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
        mContentParent.removeAllViews();
    }


    if (hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
        final Scene newScene = Scene.getSceneForLayout(mContentParent, layoutResID,
                getContext());
        transitionTo(newScene);
    } else {
        mLayoutInflater.inflate(layoutResID, mContentParent);
    }
    mContentParent.requestApplyInsets();
    final Callback cb = getCallback();
    if (cb != null && !isDestroyed()) {
        cb.onContentChanged();
    }
    mContentParentExplicitlySet = true;
}

PhoneWindow的setContentView中,首先判斷mContentParent是否存在,否則調用installDecor方法。這個mContentParent指的就是DecorView的內容欄。它的賦值就只有一個地方,就是在installDecor方法中。

private void installDecor() {
    mForceDecorInstall = false;
    if (mDecor == null) {
        mDecor = generateDecor(-1);
        mDecor.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
        mDecor.setIsRootNamespace(true);
        if (!mInvalidatePanelMenuPosted && mInvalidatePanelMenuFeatures != 0) {
            mDecor.postOnAnimation(mInvalidatePanelMenuRunnable);
        }
    } else {
        mDecor.setWindow(this);
    }
    if (mContentParent == null) {
        mContentParent = generateLayout(mDecor);
    ...
}

如果mDecor為null,就先調用generateDecor方法創建DecorView。

protected DecorView generateDecor(int featureId) {
    ...
    return new DecorView(context, featureId, this, getAttributes());
}

DecorView對象創建之后,再判斷mContentParent對象是否存在,不存在調用generateLayout方法。

protected ViewGroup generateLayout(DecorView decor) {
    ...
    ViewGroup contentParent = (ViewGroup)findViewById(ID_ANDROID_CONTENT);
    ...
    return contentParent;
}

generateLayout會返回一個ViewGroup對象contentParent,ID_ANDROID_CONTENT就是com.android.internal.R.id.content。

最后調用mLayoutInflater.inflate(layoutResID, mContentParent)方法,將Activity的布局視圖添加到mContentParent中,回調Activity的onContentChanged方法通知Activity視圖已經發生改變。

這個時候,Activity的視圖布局還沒有顯示出來,DecorView還沒有被WindowManager正式添加到窗口中。

在Activity執行onResume方法之后視圖才能完全顯示,并和用戶正常交互,onResume方法是在ActivityThread的handleLaunchActivity方法中回調。

private void handleLaunchActivity(ActivityClientRecord r, Intent customIntent, String reason) {
    ...
    Activity a = performLaunchActivity(r, customIntent);
    if (a != null) {
    r.createdConfig = new Configuration(mConfiguration);
    reportSizeConfigurations(r);
    Bundle oldState = r.state;
    handleResumeActivity(r.token, false, r.isForward,
            !r.activity.mFinished && !r.startsNotResumed, r.lastProcessedSeq, reason);
    ...
}

執行完performLaunchActivity方法返回一個Activity的實例,接下來判斷如果創建的Activity實例不為null,就會執行handleResumeActivity方法。

final void handleResumeActivity(IBinder token,
        boolean clearHide, boolean isForward, boolean reallyResume, int seq, String reason) {
    ...
    r = performResumeActivity(token, clearHide, reason);
    if (r != null) {
        final Activity a = r.activity;
        ...
        if (r.activity.mVisibleFromClient) {
            r.activity.makeVisible();
        }
    ...
}

在handleResumeActivity方法中,會調用performResumeActivity方法,經過層層調用最終會回調Activity的onResume方法。

handleResumeActivity中,在performResumeActivity方法執行之后,會調用Activity的makeVisible方法。

void makeVisible() {
    if (!mWindowAdded) {
        ViewManager wm = getWindowManager();
        wm.addView(mDecor, getWindow().getAttributes());
        mWindowAdded = true;
    }
    mDecor.setVisibility(View.VISIBLE);
}

在makeVisible方法中,會調用WindowManager的addView方法,將DecorView正式添加到窗口中,同時DecorView設置為可見。

@Override
public void addView(@NonNull View view, @NonNull ViewGroup.LayoutParams params) {
    applyDefaultToken(params);
    mGlobal.addView(view, params, mContext.getDisplay(), mParentWindow);
}

在WindowManagerImpl的addView方法內部,調用的是WindowManagerGlobal的addView方法。WindowManagerImpl通過橋接模式,將功能實現委托給了WindowManagerGlobal。WindowManagerGlobal是一個單例,說明一個進程中只有一個WindowManagerGlobal實例。每一個Window都會有一個相關聯的WindowManagerImpl實例。

public void addView(View view, ViewGroup.LayoutParams params,
        Display display, Window parentWindow) {
    if (view == null) {
        throw new IllegalArgumentException("view must not be null");
    }
    if (display == null) {
        throw new IllegalArgumentException("display must not be null");
    }
    if (!(params instanceof WindowManager.LayoutParams)) {
        throw new IllegalArgumentException("Params must be WindowManager.LayoutParams");
    }
    final WindowManager.LayoutParams wparams = (WindowManager.LayoutParams) params;
    if (parentWindow != null) {
        parentWindow.adjustLayoutParamsForSubWindow(wparams);
    } else {
        final Context context = view.getContext();
        if (context != null
                && (context.getApplicationInfo().flags
                        & ApplicationInfo.FLAG_HARDWARE_ACCELERATED) != 0) {
            wparams.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
        }
    }
    ViewRootImpl root;
    View panelParentView = null;
    ...
        int index = findViewLocked(view, false);
        if (index >= 0) {
            if (mDyingViews.contains(view)) {
                // Don't wait for MSG_DIE to make it's way through root's queue.
                mRoots.get(index).doDie();
            } else {
                throw new IllegalStateException("View " + view
                        + " has already been added to the window manager.");
            }
            // The previous removeView() had not completed executing. Now it has.
        }
        if (wparams.type >= WindowManager.LayoutParams.FIRST_SUB_WINDOW &&
                wparams.type <= WindowManager.LayoutParams.LAST_SUB_WINDOW) {
            final int count = mViews.size();
            for (int i = 0; i < count; i++) {
                if (mRoots.get(i).mWindow.asBinder() == wparams.token) {
                    panelParentView = mViews.get(i);
                }
            }
        }
        root = new ViewRootImpl(view.getContext(), display);
        view.setLayoutParams(wparams);
        mViews.add(view);
        mRoots.add(root);
        mParams.add(wparams);
        try {
            root.setView(view, wparams, panelParentView);
        } catch (RuntimeException e) {
            // BadTokenException or InvalidDisplayException, clean up.
            if (index >= 0) {
                removeViewLocked(index, true);
            }
            throw e;
        }
    }
}

WindowManagerGlobal的addView方法主要完成三個步驟:

  • 檢查參數是否合法,如果是子Window還需要調整一些布局參數
  • 創建ViewRootImpl,并將傳進來的View添加到mViews列表里
  • 通過ViewRootImpl來更新界面并完成Window的添加過程。

最終調用了root.setView(view, wparams, panelParentView)方法。

public void setView(View view, WindowManager.LayoutParams attrs, View panelParentView) {
    ...
    requestLayout();
    ...
    try {
    mOrigWindowType = mWindowAttributes.type;
    mAttachInfo.mRecomputeGlobalAttributes = true;
    collectViewAttributes();
    res = mWindowSession.addToDisplay(mWindow, mSeq, mWindowAttributes,
            getHostVisibility(), mDisplay.getDisplayId(),
            mAttachInfo.mContentInsets, mAttachInfo.mStableInsets,
            mAttachInfo.mOutsets, mInputChannel);
    ...
}

View樹被構建完成,系統會遍歷這個樹,對每個View進行測量和布局,調用requestLayout方法會觸發View層級的繪制遍歷,requestLayout方法內部會調用scheduleTraversals方法。scheduleTraversals方法實際就是View繪制過程的入口。

然后會調用mWindowSession對象的addToDisplay方法,mWindowSession的類型是IWindowSession,是一個Binder對象,用于進程間通信,IWindowSession是Client端的代理。Server端實現是Session。代碼都是運行在Activity所在的app進程,Session的addToDisplay方法則是運行在WMS所在的SystemServer進程中。

圖片圖片

@Override
public int addToDisplay(IWindow window, int seq, WindowManager.LayoutParams attrs,
        int viewVisibility, int displayId, Rect outContentInsets, Rect outStableInsets,
        Rect outOutsets, InputChannel outInputChannel) {
    return mService.addWindow(this, window, seq, attrs, viewVisibility, displayId,
            outContentInsets, outStableInsets, outOutsets, outInputChannel);
}

addToDisplay方法內部調用了mService的addWindow方法,并將Session對象本身作為第一個參數傳進去。mService就是WMS的實例,每一個app進程都會對應一個Session對象用來表示app進程與WMS的通信渠道。WMS會用ArrayList來存放這些Session對象。WMS會為這個要添加的窗口分配Surface,并確定窗口的顯示次序,真正負責顯示界面視圖的是畫布Surface而不是窗口本身。WMS會將所管理的Surface交由SurfaceFlinger處理,SurfaceFlinger會將這些Surface混合并繪制并最終呈現到屏幕上。

責任編輯:武曉燕 來源: 沐雨花飛蝶
相關推薦

2023-03-15 09:00:43

SwiftUISlider

2015-08-06 13:44:21

swiftcocoapods

2011-07-19 17:05:22

Xcode Libary

2024-01-29 10:20:39

Obsidian鏈接

2010-01-11 17:21:26

Linux Fedor

2020-09-29 07:24:14

Python字典數據

2010-04-15 17:45:26

Oracle存儲過程

2011-03-10 10:45:47

Azure“Hello Worl

2024-10-14 17:13:48

模塊Python編程

2018-09-08 09:05:00

UbuntuLinuxIP地址

2009-09-22 11:54:42

ibmdwPHP

2012-11-21 11:48:23

i-NVMM加密密碼

2011-04-08 10:29:04

AccessMIS管理系統

2022-03-30 08:19:12

JavaGroovy

2011-07-20 09:16:02

MongoDB索引稀疏索引

2020-12-16 14:29:40

終端開發shell

2022-02-10 22:34:51

對象JVM收集器

2018-11-05 15:14:42

MySQL編程語言技術

2011-07-29 13:21:31

CTE遞歸存儲過程真分頁

2017-03-13 14:30:38

Android開發庫指南
點贊
收藏

51CTO技術棧公眾號

日韩av片在线免费观看| 免费国产a级片| www.久久久久久| 亚洲永久网站| 久久精品国产91精品亚洲 | 亚洲一级片在线播放| 91国产精品| 欧美性xxxx极品高清hd直播| 中文字幕免费高| 欧美成人综合在线| 国产精品中文字幕欧美| 日韩美女视频在线观看| 久久久久久久久久一区二区三区| 国产精品午夜一区二区三区| 欧美成人午夜电影| 黑森林精品导航| 欧美伦理91| 亚洲欧美另类图片小说| 欧美一区激情视频在线观看| 丁香花免费高清完整在线播放| 可以免费看不卡的av网站| 美女视频久久黄| 最新中文字幕av| 国产一区调教| 日韩欧美一区在线| 亚洲va在线va天堂va偷拍| 澳门成人av网| 激情亚洲一区二区三区四区| 欧洲金发美女大战黑人| 日本中文字幕在线观看| 国产农村妇女毛片精品久久麻豆| 国模一区二区三区私拍视频| 亚洲a视频在线观看| 激情综合色丁香一区二区| 国产成人精品一区二区| 在线免费黄色av| 在线 亚洲欧美在线综合一区| 久久色在线播放| 在线观看天堂av| 精品国产91| 亚洲欧洲黄色网| 国产精品无码久久久久久| 国产66精品| 亚洲精品一线二线三线无人区| 国产精品探花在线播放| 日韩免费在线电影| 欧美日本精品一区二区三区| 免费涩涩18网站入口| 日韩精品第一| 欧洲精品在线观看| 一级黄色香蕉视频| 久久久成人av毛片免费观看| 91福利资源站| 亚洲欧美自偷自拍另类| 精品国产黄a∨片高清在线| 欧美在线一二三四区| 三级a在线观看| 岛国精品在线| 欧美一区二区三区在线视频 | 久久99国产精品二区高清软件| 欧美在线免费观看亚洲| 男女无套免费视频网站动漫| 成人性片免费| 91精品国产综合久久久久久久久久 | 奇米888四色在线精品| 国产精品久久久久久久美男| 日本黄色中文字幕| 麻豆精品久久久| 成人美女免费网站视频| 亚洲精品久久久久久无码色欲四季 | 国产成人一区二区三区小说| 少妇又紧又色又爽又刺激视频| 奇米四色…亚洲| 成人福利免费观看| 性网爆门事件集合av| 成人小视频免费在线观看| 国产一区二区无遮挡| 国产ts丝袜人妖系列视频| 色播色播色播色播色播在线| 国产女主播视频一区二区| 亚洲欧美日韩不卡| 超碰97国产精品人人cao| 日韩欧美a级成人黄色| 视频二区在线播放| 午夜久久av| 亚洲色图五月天| 久久国产波多野结衣| 亚洲人成久久| 国产精品免费在线免费| 黑人精品一区二区| 国产日韩影视精品| 欧洲金发美女大战黑人| 久久人体大尺度| 91 com成人网| 日本黄色特级片| 欧美成人高清| 国产精品r级在线| www.激情五月| 中文字幕精品综合| 青青草视频在线免费播放 | 亚洲性色视频| 国产精品欧美激情| 天堂av手机版| 亚洲丝袜制服诱惑| 黄色国产精品视频| 91成人入口| 色妞色视频一区二区三区四区| 久草视频在线免费看| 日本欧美一区二区三区| 国产日韩亚洲精品| 国产最新在线| 91成人免费网站| 妖精视频一区二区| 久久精品免费一区二区三区| 日韩美女中文字幕| 神马午夜在线观看| 日韩视频中文| 91黄视频在线| 婷婷激情5月天| 国产成人ay| 97色在线视频| jizz中国女人| 国产精品久久久久7777按摩 | 久久伊人亚洲| 国产女主播一区二区| av网站大全在线| 欧美日韩国产一级片| 欧美做受高潮6| 国产情侣一区| 国产一区视频观看| 91蜜桃在线视频| 欧美美女一区二区| 欧美日韩中文字幕视频| 日韩二区三区四区| 日韩.欧美.亚洲| 欧美aa视频| 精品一区精品二区| 日本熟妇成熟毛茸茸| 成人午夜激情影院| 少妇久久久久久被弄到高潮| 亚洲综合伊人| 久久久久99精品久久久久| 一级黄色片视频| 国产精品免费丝袜| 亚洲精品性视频| 99精品视频在线观看免费播放| 国产精品成人品| 国内在线精品| 欧美色图天堂网| 操她视频在线观看| 国产一区二区三区免费观看| 国产又粗又爽又黄的视频| 亚洲伦理一区二区| 美女啪啪无遮挡免费久久网站| 国产女同91疯狂高潮互磨| 亚洲精品免费在线播放| 一个人看的视频www| 欧美天堂亚洲电影院在线观看 | 台湾色综合娱乐中文网| 日本一本a高清免费不卡| 你懂的视频在线观看| 在线观看日韩av先锋影音电影院| 成年人在线免费看片| 久久99热国产| 国产性生活免费视频| 久久超级碰碰| 国产精品激情自拍| 欧美日韩xx| 日韩精品一区二区三区三区免费| 久久精品亚洲无码| 国产第一页在线| 亚洲精品免费视频| 香港三日本8a三级少妇三级99| 国产欧美二区| 亚洲一区影院| 中文字幕久久精品一区二区| 97不卡在线视频| 国产高清av在线| 欧美一区二区三区免费观看视频| 久久久久久久久久91| 久久色中文字幕| 亚洲第一天堂久久| 亚洲青色在线| 午夜久久资源| 亚洲午夜精品| 国产成人aa精品一区在线播放| 免费观看成人高潮| 亚洲电影免费观看| 中文字幕+乱码+中文乱码91| 夜色激情一区二区| 一区二区三区久久久久| 国产精品99久久不卡二区| 亚洲中文字幕无码中文字| 99欧美视频| 久久婷婷开心| 国产剧情一区二区在线观看| 国内免费久久久久久久久久久| 国产人成在线视频| 亚洲成人av中文字幕| 亚洲视频在线免费播放| 亚洲成人精品一区| 999福利视频| 久久影院视频免费| 国产一精品一aⅴ一免费| 蜜臀久久99精品久久久久久9| 久久人人爽人人爽人人av| 日韩欧美一区免费| 久久一区二区三区av| 在线精品自拍| 成人在线激情视频| 国产综合色区在线观看| 久久久在线视频| 成年人网站在线| 在线观看日韩专区| 午夜在线视频免费| 欧美xxxxx牲另类人与| 在线免费观看一区二区| 色悠悠亚洲一区二区| 99热成人精品热久久66| 91美女主播在线视频| 色妞一区二区三区| 欧美精品久久久久久久久久丰满| 精品美女一区二区| 国产欧美日韩综合精品一区二区三区| 色诱视频网站一区| 欧美国产成人精品一区二区三区| 一个色在线综合| 免费三级在线观看| 国产精品美女久久久久久久| 级毛片内射视频| 久久免费看少妇高潮| 黄色在线观看av| www.在线成人| 手机免费看av片| 东方aⅴ免费观看久久av| 国产精品无码自拍| 国产乱码精品1区2区3区| 91丨九色丨蝌蚪| 久久99精品久久久久久| 一本一道久久a久久综合蜜桃| 日本欧美一区二区| 天天操,天天操| 青青青爽久久午夜综合久久午夜| 国产成+人+综合+亚洲欧洲| 日韩精品一区二区不卡| 欧美国产精品专区| 国产不卡在线观看视频| 亚洲国产精品精华液ab| 成人性生交大片免费看无遮挡aⅴ| 国产日韩欧美高清在线| 在线观看免费黄色网址| 国产精品二三区| 亚洲xxxx3d动漫| 亚洲精品第1页| 久久久99精品| 午夜亚洲福利老司机| 圆产精品久久久久久久久久久| 欧美日韩国产一区在线| 无码人妻丰满熟妇精品区| 欧美影视一区在线| 国产精品久久婷婷| 日韩欧美激情一区| 天天操天天操天天干| 亚洲欧美日韩中文视频| 自拍视频在线播放| 久久亚洲私人国产精品va| 国产精品69xx| 日韩女优在线播放| 99精品在线免费观看| 国产精品xxxx| 免费欧美视频| 中文字幕日韩精品久久| 精品99视频| 国产精品无码一本二本三本色| 麻豆成人av在线| 麻豆tv在线观看| 国产午夜精品久久久久久久| а天堂中文在线资源| 亚洲午夜在线电影| 精品人妻一区二区三区免费看| 欧美日韩电影一区| 人妻少妇精品无码专区| 国产一区二区黑人欧美xxxx| 青花影视在线观看免费高清| 蜜桃av噜噜一区| 一级黄色电影片| 国产日韩欧美制服另类| 麻豆国产尤物av尤物在线观看| 欧美网站在线观看| 97成人免费视频| 亚洲精品久久久久中文字幕欢迎你 | 一级一片免费播放| 99国产精品99久久久久久粉嫩| caoporn超碰97| 粉嫩av一区二区三区在线播放 | 亚洲综合在线免费观看| 久久夜色精品国产噜噜亚洲av| 在线播放欧美女士性生活| 午夜性色福利视频| 日韩视频免费在线| 天堂电影一区| 91久久大香伊蕉在人线| 日本高清免费电影一区| 97在线国产视频| 精品一区二区影视| 亚洲最大成人网站| 亚洲综合一二区| 国产有码在线观看| 亚洲欧美日韩图片| www.51av欧美视频| 成人性生交xxxxx网站| 激情五月综合网| 激情深爱综合网| 国产成人精品aa毛片| 多男操一女视频| 在线视频一区二区三| 三级视频在线看| 欧美激情精品久久久久久蜜臀| 国产成人毛片| 日韩一本精品| 蜜桃av一区| 女尊高h男高潮呻吟| 亚洲一区免费观看| 国产成人久久精品77777综合| 自拍偷拍亚洲在线| 自拍偷自拍亚洲精品被多人伦好爽| 精品视频第一区| 亚洲视屏一区| 337p日本欧洲亚洲大胆张筱雨| ...xxx性欧美| 一区二区三区黄色片| 色婷婷av一区二区三区在线观看| 色豆豆成人网| 日韩激情视频| 日韩国产精品久久久久久亚洲| 国产成人精品无码免费看夜聊软件| 婷婷综合久久一区二区三区| 最近中文字幕在线mv视频在线| 妖精视频一区二区三区| 亚洲小说欧美另类激情| 麻豆久久久久久久| 羞羞在线观看视频| 欧美日韩色综合| 欧美日本高清| 51国产成人精品午夜福中文下载| 91超碰成人| 美女流白浆视频| 亚洲综合在线免费观看| 免费a级片在线观看| 久久久久久久一区二区| 久久porn| 黄色a级片免费| 国产肉丝袜一区二区| 亚洲天堂2021av| 久久精品国产99国产精品澳门| 97精品资源在线观看| 警花观音坐莲激情销魂小说| 国产精品一区二区视频| 久久亚洲成人av| 亚洲黄页视频免费观看| 欧美xxx视频| 亚洲国产一区二区三区在线播| 久久99热狠狠色一区二区| 午夜少妇久久久久久久久| 精品va天堂亚洲国产| 激情aⅴ欧美一区二区欲海潮| 玖玖玖精品中文字幕| 青青草原综合久久大伊人精品优势| 国产精品一区二区亚洲| 欧美mv日韩mv| 亚洲一二三四| 正在播放亚洲| 粉嫩绯色av一区二区在线观看| 黑人精品无码一区二区三区AV| 中文字幕亚洲第一| 欧美a在线观看| 精品中文字幕av| 国产精品视频免费看| www.国产欧美| 日本亚洲精品在线观看| 亚洲天天影视网| 国产精品无码电影| 在线观看视频一区| 欧美人与牲禽动交com| 女同一区二区| 国产精品一区二区无线| 国内自拍视频在线播放| 美女福利视频一区| 免费久久精品| 亚洲精品在线视频播放| 性做久久久久久免费观看欧美| 国产视频精选在线| 99精品欧美一区二区三区| 久久福利毛片| 欧美人妻精品一区二区免费看| 国产偷国产偷亚洲清高网站| 国产95亚洲| 国产精品拍拍拍| 性做久久久久久免费观看 | 成人免费小视频|