久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

詳解Android Activity的啟動流程

瀏覽:4日期:2022-09-20 14:45:17
前言

activity啟動的流程分為兩部分:一是在activity中通過startActivity(Intent intent)方法啟動一個Activity;二是我們在桌面通過點擊應用圖標啟動一個App然后顯示Activity;第二種方式相較于第一種方式更加全面,所以本文會以第二種流程來分析。

簡要

我們手機的桌面是一個叫做Launcher的Activity,它羅列了手機中的應用圖標,圖標中包含安裝apk時解析的應用默認啟動頁等信息。在點擊應用圖標時,即將要啟動的App和Launcher、AMS、Zygote所屬進程不同所以涉及到Launcher與AMS,AMS與Zygote,AMS與新App這四者多次通信,才會啟動一個App,然后再啟動Activity,整體的時序圖如下:

詳解Android Activity的啟動流程

接下來根據源碼來梳理一下流程。

1.Launcher向AMS發送啟動Activity

Launcher本身是一個Activity,在用戶點擊應用圖標時,調用startActivitySafely方法,最后調用到Activity.startActivity(),函數調用如下

Launcher.java public boolean startActivitySafely(View v, Intent intent, ItemInfo item) { ... //標記在新的棧啟動 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ... startActivity(intent, optsBundle); ... }Activity.java @Override public void startActivity(Intent intent) { this.startActivity(intent, null); } @Override public void startActivity(Intent intent, @Nullable Bundle options) { ... if (options != null) { //-1為requestCode表明不需要知道是否啟動成功 startActivityForResult(intent, -1, options); } else { startActivityForResult(intent, -1); } } public void startActivityForResult(@RequiresPermission Intent intent, int requestCode, @Nullable Bundle options) { ... Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity( this, mMainThread.getApplicationThread(), mToken,this,intent, requestCode, options); ... }

每個Activity都持有Instrumentation對象,通過它的execStartActivity函數來繼續完成啟動Activity的流程,這個函數中傳入了mMainThread.getApplicationThread(),它獲取到的是ActivityThread的內部類ApplicationThread,這是一個Binder對象,之后AMS通過此對象與App的通信。

Instrumentation.javapublic ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, Activity target, Intent intent, int requestCode, Bundle options) { ...int result = ActivityTaskManager.getService().startActivity(whoThread,who.getBasePackageName(), who.getAttributionTag(),intent,intent.resolveTypeIfNeeded(who.getContentResolver()), token,target != null ? target.mEmbeddedID : null, requestCode, 0, null, options); ...}ActivityTaskManager.javapublic static IActivityTaskManager getService() { return IActivityTaskManagerSingleton.get();} private static final Singleton<IActivityTaskManager> IActivityTaskManagerSingleton = new Singleton<IActivityTaskManager>() { @Override protected IActivityTaskManager create() { final IBinder b = ServiceManager.getService(Context.ACTIVITY_TASK_SERVICE); return IActivityTaskManager.Stub.asInterface(b); } }};

這一步Launcher開始向AMS通信,由于在不同的進程所以需要通過Binder來通信,IActivityTaskManager是一個代理AMS端Binder的對象,之后AMS開始startActivity。 到這里Launcher向AMS請求啟動一個Activity的流程就結束了。

2.AMS啟動Activity并通知Launcher進入Paused狀態

現在的流程是在AMS中,也就是另一個進程中,上一步通過代理調用到AMS的startActivity方法,接下來的調用如下:

ActivityTaskManagerService.java @Override public final int startActivity(IApplicationThread caller, String callingPackage, String callingFeatureId, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo, Bundle bOptions) { return startActivityAsUser(caller, callingPackage, callingFeatureId, intent, resolvedType, resultTo, resultWho, requestCode, startFlags, profilerInfo, bOptions, UserHandle.getCallingUserId()); } @Override public int startActivityAsUser(IApplicationThread caller, String callingPackage, String callingFeatureId, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId) { return startActivityAsUser(caller, callingPackage, callingFeatureId, intent, resolvedType, resultTo, resultWho, requestCode, startFlags, profilerInfo, bOptions, userId, true /*validateIncomingUser*/); } private int startActivityAsUser(IApplicationThread caller, String callingPackage, @Nullable String callingFeatureId, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId, boolean validateIncomingUser) { ... userId = getActivityStartController().checkTargetUser(userId, validateIncomingUser, Binder.getCallingPid(), Binder.getCallingUid(), 'startActivityAsUser'); return getActivityStartController().obtainStarter(intent, 'startActivityAsUser') .setCaller(caller) .setCallingPackage(callingPackage) .setCallingFeatureId(callingFeatureId) .setResolvedType(resolvedType) .setResultTo(resultTo) .setResultWho(resultWho) .setRequestCode(requestCode) .setStartFlags(startFlags) .setProfilerInfo(profilerInfo) .setActivityOptions(bOptions) .setUserId(userId) .execute(); } ActivityStarter obtainStarter(Intent intent, String reason) { return mFactory.obtain().setIntent(intent).setReason(reason); }

上面幾步主要是做權限檢查

ActivityStarter.java int execute() { ... res = executeRequest(mRequest); ... }//層層調用會到下面這個方法ActivityStack.java private boolean resumeTopActivityInnerLocked(ActivityRecord prev, ActivityOptions options) { ... if (mResumedActivity != null) { pausing |= startPausingLocked(userLeaving, false , next); } ... mStackSupervisor.startSpecificActivity(next, true, false); ... }

startPausingLocked方法主要是通知Launcher進入Paused狀態,在它進入這個狀態后,在ActivityStackSupervisor.startSpecificActivity方法判斷新的App進程狀態做出不同響應,如下:

ActivityStackSupervisor.javavoid startSpecificActivity(ActivityRecord r, boolean andResume, boolean checkConfig) { // 獲取要啟動的Activity進程信息 final WindowProcessController wpc = mService.getProcessController(r.processName, r.info.applicationInfo.uid); boolean knownToBeDead = false; //如果進程存在且有進程中有線程存在 就是啟動一個同應用的Activity(普通Activity就在此執行) if (wpc != null && wpc.hasThread()) { try { realStartActivityLocked(r, wpc, andResume, checkConfig); return; } catch (RemoteException e) { Slog.w(TAG, 'Exception when starting activity ' + r.intent.getComponent().flattenToShortString(), e); } // If a dead object exception was thrown -- fall through to // restart the application. knownToBeDead = true; }//否則通過AMS向Zygote進程請求創建新的進程 r.notifyUnknownVisibilityLaunchedForKeyguardTransition(); final boolean isTop = andResume && r.isTopRunningActivity(); mService.startProcessAsync(r, knownToBeDead, isTop, isTop ? 'top-activity' : 'activity');}

截止到這里完成了Launcher和AMS的通信,以及AMS和Zygote進程的通信,接下來我們要創建要啟動的App的線程,即ActivityThread。

3.新的進程啟動,ActivityThread的main函數入口

上一部分Zygote啟動新的進程時標記ActivityThread.main函數,在Zygote創建好新進程后通過反射調用此方法,現在處于新App的進程中。

ActivityThread.java public static void main(String[] args) { ... Looper.prepareMainLooper();... ActivityThread thread = new ActivityThread(); thread.attach(false, startSeq);... Looper.loop();... } private void attach(boolean system, long startSeq) { final IActivityManager mgr = ActivityManager.getService(); try { mgr.attachApplication(mAppThread, startSeq); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } ... }ActivityManagerService.java private boolean attachApplicationLocked(@NonNull IApplicationThread thread, int pid, int callingUid, long startSeq) { ... thread.bindApplication(processName, appInfo, providerList, instr2.mClass, profilerInfo, instr2.mArguments, instr2.mWatcher, instr2.mUiAutomationConnection, testMode, mBinderTransactionTrackingEnabled, enableTrackAllocation, isRestrictedBackupMode || !normalMode, app.isPersistent(), new Configuration(app.getWindowProcessController().getConfiguration()), app.compat, getCommonServicesLocked(app.isolated), mCoreSettingsObserver.getCoreSettingsLocked(), buildSerial, autofillOptions, contentCaptureOptions, app.mDisabledCompatChanges); ... didSomething = mAtmInternal.attachApplication(app.getWindowProcessController()); ... }

這里主要是創建了Looper和ActivityThread對象,然后將當前應用ApplicationThread注冊到AMS中,ApplicationThread是ActivityThread的內部類實現了IApplicationThread.Stub用此對象可跨進程通信,上面的代碼邏輯分兩步,第一步,在AMS綁定ApplicationThread時,發送了一個H.BIND_APPLICATION的Message,在Handler中處理該消息時調用了Application的onCreate方法,第二步,在mAtmInternal的attachApplication層層調用到ActivityStackSupervisor.realStartActivityLocked方法,整體如下:

public final void bindApplication(String processName, ApplicationInfo appInfo, ProviderInfoList providerList, ComponentName instrumentationName, ProfilerInfo profilerInfo, Bundle instrumentationArgs, IInstrumentationWatcher instrumentationWatcher, IUiAutomationConnection instrumentationUiConnection, int debugMode, boolean enableBinderTracking, boolean trackAllocation, boolean isRestrictedBackupMode, boolean persistent, Configuration config, CompatibilityInfo compatInfo, Map services, Bundle coreSettings, String buildSerial, AutofillOptions autofillOptions, ContentCaptureOptions contentCaptureOptions, long[] disabledCompatChanges) { ... sendMessage(H.BIND_APPLICATION, data); } public void handleMessage(Message msg) { switch (msg.what) { case BIND_APPLICATION: AppBindData data = (AppBindData)msg.obj; handleBindApplication(data); Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); break; ... }}private void handleBindApplication(AppBindData data) {...mInstrumentation.callApplicationOnCreate(app);...}

到這里為止,新的App線程已經啟動并且綁定了Application。

4.創建Activity

ActivityStackSupervisor.javaboolean realStartActivityLocked(ActivityRecord r, WindowProcessController proc, boolean andResume, boolean checkConfig) throws RemoteException { ... final ClientTransaction clientTransaction = ClientTransaction.obtain( proc.getThread(), r.appToken); final DisplayContent dc = r.getDisplay().mDisplayContent; clientTransaction.addCallback(LaunchActivityItem.obtain(new Intent(r.intent), System.identityHashCode(r), r.info, mergedConfiguration.getGlobalConfiguration(), mergedConfiguration.getOverrideConfiguration(), r.compat, r.launchedFromPackage, task.voiceInteractor, proc.getReportedProcState(), r.getSavedState(), r.getPersistentSavedState(), results, newIntents, dc.isNextTransitionForward(), proc.createProfilerInfoIfNeeded(), r.assistToken, r.createFixedRotationAdjustmentsIfNeeded())); final ActivityLifecycleItem lifecycleItem; if (andResume) { lifecycleItem = ResumeActivityItem.obtain(dc.isNextTransitionForward()); } else { lifecycleItem = PauseActivityItem.obtain(); } clientTransaction.setLifecycleStateRequest(lifecycleItem); //執行clientTransaction mService.getLifecycleManager().scheduleTransaction(clientTransaction); ...}

ClientTransaction管理了Activity的啟動信息,由ClientLifecycleManager執行,scheduleTransaction方法中發送了EXECUTE_TRANSACTION的消息給ActivityThread的H類處理,然后執行TransactionExecutor.execute(),之后執行handleLaunchActivity方法,如下

void scheduleTransaction(ClientTransaction transaction) throws RemoteException { final IApplicationThread client = transaction.getClient(); transaction.schedule(); ... } public void schedule() throws RemoteException { mClient.scheduleTransaction(this); } void scheduleTransaction(ClientTransaction transaction) { transaction.preExecute(this); sendMessage(ActivityThread.H.EXECUTE_TRANSACTION, transaction); } class H extends Handler { ... public void handleMessage(Message msg) { ... case EXECUTE_TRANSACTION: final ClientTransaction transaction = (ClientTransaction) msg.obj; mTransactionExecutor.execute(transaction); if (isSystem()) { transaction.recycle(); } break; ... } ... } public void execute(ClientTransactionHandler client, IBinder token, PendingTransactionActions pendingActions) { ... client.handleLaunchActivity(r, pendingActions, null /* customIntent */); }

接下來由ActivityThread來處理后續操作

public Activity handleLaunchActivity(ActivityClientRecord r, PendingTransactionActions pendingActions, Intent customIntent) { ... final Activity a = performLaunchActivity(r, customIntent); ... return a;}private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) { ContextImpl appContext = createBaseContextForActivity(r); ... java.lang.ClassLoader cl = appContext.getClassLoader(); activity = mInstrumentation.newActivity(cl, component.getClassName(), r.intent); ... Application app = r.packageInfo.makeApplication(false, mInstrumentation); ... 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, r.assistToken); ... activity.setTheme(theme); ... mInstrumentation.callActivityOnCreate(activity, r.state, r.persistentState);}

performLaunchActivity方法中主要做了以下幾件事:

創建要啟動activity的上下文環境 通過Instrumentation的newActivity方法,以反射形式創建activity實例 如果Application不存在的話會創建Application并調用Application的onCreate方法 初始化Activity,創建Window對象(PhoneWindow)并實現Activity和Window相關聯 通過Instrumentation調用Activity的onCreate方法 總結

根Activity整體上學習意義較大,建議從整體流程入手,遇到流程不通時也可以debug。 Activity的整體啟動流程:

點擊圖標,Launcher向AMS請求啟動該App AMS反饋收到啟動請求,并告知Launcher進入pause狀態 Launcher進入Paused狀態并告知AMS AMS檢測新的App是否已啟動,否則通知Zygote創建新的進程并啟動ActivityThread.main() 應用進程啟動ActivityThread ActivityThread中H處理需要啟動Activity的請求消息

以上就是詳解Android Activity的啟動流程的詳細內容,更多關于Android Activity的啟動流程的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 久久av网| 亚洲欧洲精品视频在线观看 | 日本欧美久久久久 | 嫩草精品 | 久久狠狠 | 久久色视频 | 欧美日韩成人在线 | 中文字幕日韩一区 | 欧美日韩电影一区 | 日日夜夜精品网站 | 99草视频 | 成年人网站免费在线观看 | jizz18毛片| 国产精品一区二区三区免费 | 99久久久国产精品美女 | 精产国产伦理一二三区 | 看真人视频a级毛片 | 国产一区二区在线看 | 在线看成人片 | 欧美日韩国产影院 | 成人欧美一区二区三区黑人孕妇 | 国产午夜久久 | 激情小说综合网 | 国产精品永久免费 | 成年人视频在线免费观看 | av在线免费观看网址 | 久久亚洲91 | 春色导航 | 不卡视频一区 | 国产免费拔擦拔擦8x高清在线人 | 日本中文字幕一区二区 | 国产精品伊人 | www.日韩精品.com | 久久精品这里热有精品 | 亚洲一区二区三区高清 | 欧美日韩一区在线观看 | 国产欧美综合一区二区三区 | 91精品久久久久久久久久久久久久久 | 国产精品欧美一区二区三区不卡 | 凹凸日日摸日日碰夜夜爽孕妇 | 国产一区在线视频 | 亚洲精品一区二区 | 99re免费视频精品全部 | 久久精品二区亚洲w码 | 午夜激情在线播放 | 亚洲高清视频在线观看 | 精品亚洲永久免费精品 | 欧美精品欧美极品欧美激情 | 亚洲欧洲一区二区 | 久久av一区二区 | 两性午夜视频 | 日韩欧美视频在线 | 一区二区精品在线 | 国产目拍亚洲精品99久久精品 | 国产精品久久久久久久久久久免费看 | 日韩综合在线 | 亚洲精品乱码久久久久膏 | 一级全黄少妇性色生活片毛片 | 日韩精品一区二区三区在线 | aaa在线| 亚洲国产综合在线 | 欧美日韩中文在线 | 亚洲永久免费视频 | 国产精品女同一区二区久久夜 | 国产精品自拍视频 | 国产3区 | 中文字幕亚洲一区二区三区 | 免费成人高清 | 色www精品视频在线观看 | 日韩国产欧美视频 | 2012中文版免费观看 | 草久网 | 一级电影在线观看 | 99热成人在线 | 国产欧美日韩综合精品一区二区 | a黄视频 | 国产高清av在线一区二区三区 | 精品久久久久久久久久久 | 亚洲午夜精品视频 | 国产日产精品一区二区三区四区 | 国产精品久久久久久婷婷天堂 | 成人久久久久久久 | 亚洲高清视频网站 | 色婷婷综合在线 | 日韩在线视频精品 | 国产综合久久久久久鬼色 | 日本久久精品一区二区 | 久久99久久久久 | 国产一级片 | 久久久国产视频 | 九一精品 | 国产精品一区二区在线 | 亚洲成人二区 | 久久成人免费 | 欧美精品1区 | 午夜免费视频 | 99视频在线看| 国产一区免费在线观看 | www久久精品 | 99久久久久久 | 日韩精品av一区二区三区 | 精品久久久久久亚洲精品 | 天天操天天干视频 | 欧美激情在线狂野欧美精品 | 一区二区不卡视频 | 影音先锋国产 | 亚洲国产精品麻豆 | 在线观看国产小视频 | 一级毛片大全免费播放 | 欧美伦理一区二区三区 | 亚洲日本va中文字幕 | 精品在线一区二区 | 久久精品一区二区三区四区 | 亚洲精品天堂 | 自拍视频在线播放 | 在线伊人网 | 国产中文一区 | 91在线免费观看 | 国产小视频在线播放 | 天天操操| 久久国产一区二区 | 中文一区| www.国产视频| 日本一区二区三区免费观看 | 伊人爽| 国产午夜精品一区二区三区 | 91久久久久久久久 | 日韩在线播放网址 | 樱桃小丸子在线观看 | 国产成人精品一区二区三区视频 | 久久久精品影院 | 欧美国产精品一区 | 成人免费毛片嘿嘿连载视频 | 欧美激情综合五月色丁香小说 | 日韩小视频网站 | 可以免费在线观看av的网站 | 在线视频不卡一区 | 99久久精品国产毛片 | 国产一区二区三区视频在线观看 | 国产污视频在线 | 中文久久 | 日本成人黄色网址 | 男人天堂社区 | 精品中文字幕一区 | 天天操夜夜拍 | 日韩视频在线免费观看 | av在线精品| 久久久久中文字幕 | 亚洲欧美日韩在线一区二区三区 | 在线看国产 | 成人国产一区 | 精品国产一区二区三区在线观看 | 午夜免费剧场 | 久久久999成人 | 一区二区免费看 | 欧美极品一区二区 | 亚洲一区二区 | 天堂亚洲网 | 国产成人免费视频网站视频社区 | 日韩成人一区 | 久久精品无码一区二区三区 | 好色视频在线观看 | 国产午夜精品一区二区三区嫩草 | 国产精品久久久久久久久免费软件 | 国产精品免费av | 亚洲高清中文字幕 | 欧美黑人狂躁日本寡妇 | 一区二区三区在线 | 日韩欧美一区二区在线观看视频 | 777777777亚洲妇女 | 嫩草视频在线播放 | 999精品一区| 中文字幕免费在线 | 午夜私人影院在线观看 | 成人欧美一区二区三区黑人孕妇 | 国产精品国产精品国产专区不卡 | 成人不卡视频 | 亚洲日日 | 亚洲精品久久久久久下一站 | 91精品国产综合久久精品 | 日本在线视 | 日本精品一区二区在线观看 | 国产99久久 | 日韩高清国产一区在线 | 最新免费av网站 | 国产成人免费 | 久久青 | 色视频在线播放 | 亚洲 精品 综合 精品 自拍 | 一级高清视频 | 在线观看亚洲一区二区三区 | 国产精品永久免费 | 日韩在线免费视频 | 欧美精品乱码久久久久久按摩 | 91久久精品一区二区别 | 亚洲一区二区中文字幕 | 亚洲欧美国产毛片在线 | 操操网 | 81精品国产乱码久久久久久 | 久久精品综合 | 中文字幕 在线观看 | 一二区视频| 一本一道久久a久久精品综合 | 夜本色| 亚洲国产成人精品女人久久久 | 成人精品久久久 | 日日人人 | 成人在线手机版视频 | 久久一精品 | 成人羞羞在线观看网站 | 国产精品1区2区 | 亚洲精品视频在线 | 欧美日韩精品久久久 | 国产aaaaav久久久一区二区 | 国产成人精品电影 | 在线免费中文字幕 | 狠狠干美女 | 亚洲激情在线 | 国产精品一区二区三区免费 | 五月婷婷丁香在线 | 国产wwwcom| 狠狠色综合色综合网络 | 亚洲久视频 | 国产人体视频 | 一区二区三区福利视频 | 99免费精品| 黄的视频网站 | 久久综合精品视频 | 国产精品久久久久久久久久久免费看 | 成人在线观 | 成人黄色片在线观看 | 91精品国产91久久久久游泳池 | 国产成人在线看 | 国产一级视频 | 最新中文字幕在线 | 久久久久久久国产精品 | 中文字幕在线视频免费观看 | 精品国产乱码久久久久久丨区2区 | 久久视频一区 | 国产在线一级片 | 欧美大片网站 | 久久久精品国产 | 色网在线看 | 国产高清毛片 | 欧美一级免费看 | 精品成人在线 | 天天操操| 黄色一级在线观看 | 日韩欧美综合 | 一级黄片毛片 | 91视频在线播放视频 | 国产精品自产拍在线观看 | 中文字幕 国产精品 | 亚洲 中文 欧美 日韩 在线观看 | 亚洲精品一区二区三区在线播放 | 一级片在线观看免费 | 亚洲精品3 | 成人激情视频在线免费观看 | 日日干夜夜骑 | 亚洲欧美日韩在线一区 | 亚洲va欧美va天堂v国产综合 | 欧美不卡一区二区三区 | 日韩在线精品视频 | 欧美在线一区二区三区 | 成人av网址在线观看 | 国产精品久久久久久福利一牛影视 | 亚洲综合色视频在线观看 | 日韩素人一区二区三区 | 午夜欧美一区二区三区在线播放 | 91久久久久久久久 | 国产传媒视频 | 一级黄色爱爱视频 | 毛片综合 | 日韩高清在线一区 | 久久成人精品 | 日韩一区二区在线观看视频 | 成人免费小视频 | 色婷婷国产精品久久包臀 | 天天看天天做 | 久久久蜜桃一区二区人 | 露娜同人18av黄漫网站 | 天天干人人干 | 国产精品成人3p一区二区三区 | 日韩国产一区二区 | 一区二区成人 | 在线看成人片 | 天天看天天摸天天操 | 色噜噜视频 | 91精品久久久久久久久 | 国产99久久精品一区二区永久免费 | 龙珠z在线观看 | 午夜免费视频 | 午夜影院免费观看视频 | av免费在线播放 | 亚洲精品66| 国产亚洲精品久久久久久久久 | 国产激情网站 | 国产1区| 精品国产影院 | 不用播放器的免费av | 亚洲一区二区 | 精品中文字幕一区二区三区 | 国产视频精品自拍 | 国产精品美女久久久久aⅴ国产馆 | 天堂动漫 | 亚洲精品成人av | 国产精品高潮呻吟 | 色婷婷国产精品综合在线观看 | 成人性视频免费网站 | 国产精品国产 | 久久av一区二区三区亚洲 | 中文字幕日韩欧美 | 国产综合精品一区二区三区 | 丁香五月网久久综合 | 国产欧美在线 | 国产二区视频 | 综合av第一页| av色伊人久久综合一区二区 | 久久99精品久久久久久琪琪 | 久操成人 | 亚洲午夜性视频 | 日韩成人精品在线 | 91福利网站在线观看 | 色综合天天综合网国产成人网 | 影音在线资源 | 久精品在线 | 欧美日韩久久 | 成人av播放 | 国户精品久久久久久久久久久不卡 | 精品久久久久香蕉网 | 97视频网站| 久久国产精品无码网站 | 91久久久久| 亚洲成av人片一区二区梦乃 | 久久久精品国产 | 日韩大尺度电影在线观看 | 99久久99热这里只有精品 | 日韩欧美二区 | 激情的网站 | 蜜桃视频网站在线观看 | 国产精品久久天天躁 | 精品久久久久久久久久久 | 视频一区二区三区中文字幕 | 中文字幕 国产精品 | 久久com| www.国产精品| 四虎影视网址 | 久久久久免费观看 | 欧美视频一级片 | 九九视频这里只有精品 | 欧美一区免费 | 亚洲国产1区 | 一区二区在线视频免费观看 | 国产综合精品一区二区三区 | www狠狠干| 亚洲欧美日韩精品久久亚洲区 | 在线中文视频 | 看真人视频a级毛片 | 91在线视频 | 青青草av电影 | 亚洲天堂一区二区三区 | 亚洲热在线视频 | 免费一区二区 | www欧美 | 国产精品美女久久久久aⅴ国产馆 | 午夜影院免费 | 久久免费视频观看 | 亚洲精品色 | 久久久精品国产 | 国产一区二区三区久久久 | 国产一级一级国产 | 亚洲成人免费 | 免费一级毛片 | 久久久久亚洲 | 国产精选一区二区三区不卡催乳 | 亚洲精品99| 欧美a网| 欧美在线观看免费观看视频 | 久久久久久久久免费视频 | 欧美在线a | 天天操,夜夜操 | 精品国产视频 | 国产美女高潮 | 午夜影院在线观看 | 国产成人综合在线观看 | 久久久国产一区 | 精品久久久久久久久久久久久久 | 国产精品一区二区不卡 | 黄色一级大片视频 | 欧美二区视频 | 日韩免费激情视频 | 国产欧美日韩一区二区三区 | 国产精品九九九 | 精品视频二区三区 | 精品一区二区三区在线观看 | 欧美专区中文字幕 | 国产va| 99视频精品在线 | 国产精品99久久久久久宅男 | 久久99国产精品久久99果冻传媒 | www.99精品 | 久久91av | 成人在线观看免费视频 | 色婷婷av一区二区三区大白胸 | 亚洲成av人影片在线观看 | 国产一区二区黑人欧美xxxx | 天天天操 | 99成人精品 | 狠狠干欧美 | 成年视频在线观看福利资源 | 亚洲一级在线观看 | 黄色国产一级视频 | 国产电影一区二区 | 精品成人| 91成人在线| 美女久久久久久久久久久 | 青青久久久 | 欧美成年黄网站色视频 | 日韩成人精品在线 | 久久1区 | 国产成人福利在线 | 成人一区二区三区久久精品嫩草 | 欧美精品影院 | 人妖天堂狠狠ts人妖天堂狠狠 | 国产一区二区影院 | 国产精品a久久久久 | 青青草av电影 | 九九九视频 | 欧美三级电影在线播放 | 中文字幕亚洲视频 | 91色电影| 欧美性猛片aaaaaaa做受 | 欧美日韩一区二区三区在线观看 | 国产色在线 | 免费观看一区二区三区 | 一级毛片免费完整视频 | 久久久久综合狠狠综合日本高清 | 国产精品日本欧美一区二区三区 | 国产精品国产精品国产专区不片 | 亚洲国产精品99久久久久久久久 | 99精品全国免费观看视频软件 | 青青久久网 | 国产精品成人免费视频 | 国产精品久久久久久福利一牛影视 | 中文字幕7777 | 91婷婷射| 婷婷综合 | 97国产免费 | 午夜成人免费视频 | 国产精品视频播放 | 波多野结衣一二三 | 亚洲精品视频免费 | 日韩www | 国产精品一区二区三区在线播放 | 国产区视频在线观看 | 女人高潮特级毛片 | 一区二区三区免费在线观看 | 日本三级在线网站 | 国产大片在线观看 | 91精品国产九九九久久久亚洲 | 日韩高清在线一区 | 亚洲欧美日韩另类精品一区二区三区 | 91麻豆精品国产91久久久更新资源速度超快 | 国产精品久久久久一区二区三区 | 日韩精品一区二区三区 | 亚洲精品一区二区三区蜜桃久 | 国产一区 | 狠狠狠色丁香婷婷综合久久五月 | 亚洲成人免费观看 | 91精品视频在线播放 | 黄色一级片看看 | 国产精品久久 | 欧美日韩三区 | 成人亚洲视频在线观看 | 一区二区三区免费 | 国产精品一二区 | 欧美韩一区二区 | 欧美| 精品日韩一区 | 最新国产视频 | 日韩字幕一区 | 69久久99精品久久久久婷婷 | 国外成人在线视频网站 | 亚洲人人草 | av在线国产精品 | 日韩一二三区在线观看 | 91久久久久 | 五月激情综合网 | 羞羞在线视频 | 亚洲天堂av网 | 免费一级片 | 成人1区2区| 全毛片 | 欧美日韩高清在线一区 | 日本精品在线 | 中文字幕在线导航 | 福利视频一区二区三区 | 久久久久一区二区三区 | 中文字幕乱码一区二区三区 | 美女午夜视频 | 国产精品久久99 | 国产精品乱码一区二区三区 | 久久亚洲高清 | 最新中文字幕久久 | 欧美日韩最新 | 无码日韩精品一区二区免费 | 巴西性猛交xxxx免费看久久久 | 曰批视频在线观看 | 欧美14一18处毛片 | 免费亚洲网站 | 成人午夜免费视频 | 国产精品18hdxxxⅹ在线 | 激情欧美一区二区三区中文字幕 | 国产精品久久久久久久久 | 偷拍做爰吃奶视频免费看 | av一级毛片 | 日韩在线观看一区二区 | 日本一区二区高清不卡 | 欧美一级二级视频 | 日韩视频精品在线 | 五月婷婷综合激情网 | 亚洲欧美精品 | 在线播放国产视频 | 日韩一片 | 吴梦梦到粉丝家实战华中在线观看 | 精品国产黄a∨片高清在线 99热婷婷 | 亚洲精品一区久久久久久 | 欧美一级电影 | 欧美视频xxx | 国产精品二区三区 | 91视频精选| 亚洲毛片在线 | 91久久看片 | 精品一区二区在线观看 | 亚州激情 | 99riav国产一区二区三区 | 久久精品亚洲精品 | 免费看一区二区三区 | 久久久久亚洲视频 | 在线观看精品视频网站 | 成人免费xxx在线观看 | 国产在线观看一区 | 精品国产91亚洲一区二区三区www | 中文字幕国产在线视频 | 91在线入口 | 国产精品三级久久久久久电影 | 日韩精品免费 | 午夜影院在线观看免费 | 亚洲美女在线视频 | 成人不卡| 国产激情 | 国产一区二区av | 日韩视频在线免费观看 | 亚洲成人av在线播放 | 午夜免费视频 | 黄色一级视频 | 综合网视频| 日韩一区二区三区在线观看 | 国产综合视频 | 国产福利在线观看视频 | 中国一级毛片 | 亚洲精品在线免费 | 亚洲视频在线免费观看 | 国产午夜精品久久久久免费视高清 | 青草青草久热精品视频在线观看 | 国产精品永久在线 | 亚洲综合色自拍一区 | 91精品国产综合久久精品 | 精品在线一区二区 | 成人av影视在线观看 | 久久久久亚洲精品 | 国产成人高清 | 国产欧精精久久久久久久 | 国模一区二区三区 | 国产精品一区二区在线观看 | 国产免费拔擦拔擦8x高清在线人 | 福利视频网站 | 亚洲精品成人免费 | 伊人网址| 一区亚洲 | 亚洲电影免费 | 激情欧美日韩一区二区 | 日本三级一区二区 | av资源中文在线 | 黄色一级片免费播放 | 日韩成人一区 | 午夜影视 | www日本视频 | 在线观看免费黄色片 | 狠狠操夜夜操 | 成人a毛片 | 国产精品精品 | 国产一区精品视频 | 色av综合在线| 久久久久久久久久久久99 | 99久久电影 | 四虎免费看黄 | 日韩色区 | 免费一级欧美在线观看视频 | 免费xxxx大片国产在线 | 在线视频中文字幕 | 97久久超碰 | 久久99精品国产麻豆婷婷洗澡 | 久久国产一区 | 久久精品国产一区二区电影 | 日韩免费一区二区 | 不卡的毛片 | 欧美日韩在线观看视频 | 中文字幕在线三区 | 免费的黄色片子 | 在线视频成人永久免费 | 国产精彩视频 | 国产精品乱码一二三区的特点 | 国产精品影院在线观看 | 天堂视频在线 |