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

Android源碼進階之ActivityRecord、TaskRecord、ActivityStack以及啟動模式詳細分析

移動開發 Android
activity啟動時候會說到activity棧,任務棧,activity任務棧等詞語,但是如果細問這些名詞的代表著什么?以什么表現形式出現?

[[420066]]

前言

activity啟動時候會說到activity棧,任務棧,activity任務棧等詞語,但是如果細問這些名詞的代表著什么?以什么表現形式出現?

一個ActivityRecord對應一個Activity,保存了一個Activity的所有信息;但是一個Activity可能會有多個ActivityRecord,因為Activity可以被多次啟動,這個主要取決于其啟動模式;

一個TaskRecord由一個或者多個ActivityRecord組成,這就是我們常說的任務棧,具有后進先出的特點;

ActivityStack則是用來管理TaskRecord的,包含了多個TaskRecord;

今天我們就來聊聊怎么管理activity以及任務棧等;

一、任務棧源碼解析

1、ActivityRecord

ActivityRecord:歷史棧中的一個條目,代表一個activity

  1. final class ActivityRecord extends ConfigurationContainer implements AppWindowContainerListener { 
  2.         final ActivityManagerService service; // owner 
  3.         final IApplicationToken.Stub appToken; // window manager token 
  4.         AppWindowContainerController mWindowContainerController; 
  5.         final ActivityInfo info; // all about me 
  6.         final ApplicationInfo appInfo; // information about activity's app 
  7.         //省略其他成員變量 
  8.         //ActivityRecord所在的TaskRecord 
  9.         private TaskRecord task;        // the task this is in
  10.         //構造方法,需要傳遞大量信息 
  11.         ActivityRecord(ActivityManagerService _service, ProcessRecord _caller, int _launchedFromPid, 
  12.                        int _launchedFromUid, String _launchedFromPackage, Intent _intent, String _resolvedType, 
  13.                        ActivityInfo aInfo, Configuration _configuration, 
  14.                        com.android.server.am.ActivityRecord _resultTo, String _resultWho, int _reqCode, 
  15.                        boolean _componentSpecified, boolean _rootVoiceInteraction, 
  16.                        ActivityStackSupervisor supervisor, ActivityOptions options, 
  17.                        com.android.server.am.ActivityRecord sourceRecord) { 
  18.         } 
  19.     } 
  • 實際上,ActivityRecord中存在著大量的成員變量,包含了一個Activity的所有信息;
  • ActivityRecord中的成員變量task表示其所在的TaskRecord,由此可以看出:ActivityRecord與TaskRecord建立了聯系;

startActivity()時會創建一個ActivityRecord

  1. class ActivityStarter { 
  2.         private int startActivity(IApplicationThread caller, Intent intent, Intent ephemeralIntent, 
  3.                                   String resolvedType, ActivityInfo aInfo, ResolveInfo rInfo, 
  4.                                   IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, 
  5.                                   IBinder resultTo, String resultWho, int requestCode, int callingPid, int callingUid, 
  6.                                   String callingPackage, int realCallingPid, int realCallingUid, int startFlags, 
  7.                                   ActivityOptions options, boolean ignoreTargetSecurity, boolean componentSpecified, 
  8.                                   com.android.server.am.ActivityRecord[] outActivity, TaskRecord inTask) { 
  9.             //其他代碼略 
  10.             ActivityRecord r = new ActivityRecord(mService, callerApp, callingPid, callingUid, 
  11.                     callingPackage, intent, resolvedType, aInfo, mService.getGlobalConfiguration(), 
  12.                     resultRecord, resultWho, requestCode, componentSpecified, voiceSession != null
  13.                     mSupervisor, options, sourceRecord); 
  14.             //其他代碼略 
  15.         } 
  16.     } 

2、TaskRecord

TaskRecord,內部維護一個ArrayList用來保存ActivityRecord;

  1. final class TaskRecord extends ConfigurationContainer implements TaskWindowContainerListener { 
  2.         final int taskId;       //任務ID 
  3.         final ArrayList<ActivityRecord> mActivities;   //使用一個ArrayList來保存所有的ActivityRecord 
  4.         private ActivityStack mStack;   //TaskRecord所在的ActivityStack 
  5.         //構造方法 
  6.         TaskRecord(ActivityManagerService service, int _taskId, ActivityInfo info, Intent _intent, 
  7.                    IVoiceInteractionSession _voiceSession, IVoiceInteractor _voiceInteractor, int type) { 
  8.         } 
  9.         //添加Activity到頂部 
  10.         void addActivityToTop(com.android.server.am.ActivityRecord r) { 
  11.             addActivityAtIndex(mActivities.size(), r); 
  12.         } 
  13.         //添加Activity到指定的索引位置 
  14.         void addActivityAtIndex(int index, ActivityRecord r) { 
  15.             //... 
  16.             r.setTask(this);//為ActivityRecord設置TaskRecord,就是這里建立的聯系 
  17.             //... 
  18.             index = Math.min(sizeindex); 
  19.             mActivities.add(index, r);//添加到mActivities 
  20.             //... 
  21.         } 
  22.         //其他代碼略 
  23.     } 
  • 可以看到TaskRecord中使用了一個ArrayList來保存所有的ActivityRecord;
  • 同樣,TaskRecord中的mStack表示其所在的ActivityStack;

startActivity()時也會創建一個TaskRecord;

  1. class ActivityStarter { 
  2.         private int setTaskFromReuseOrCreateNewTask(TaskRecord taskToAffiliate, int preferredLaunchStackId, ActivityStack topStack) { 
  3.             mTargetStack = computeStackFocus(mStartActivity, true, mLaunchBounds, mLaunchFlags, mOptions); 
  4.             if (mReuseTask == null) { 
  5.                 //創建一個createTaskRecord,實際上是調用ActivityStack里面的createTaskRecord()方法,ActivityStack下面會講到 
  6.                 final TaskRecord task = mTargetStack.createTaskRecord( 
  7.                         mSupervisor.getNextTaskIdForUserLocked(mStartActivity.userId), 
  8.                         mNewTaskInfo != null ? mNewTaskInfo : mStartActivity.info, 
  9.                         mNewTaskIntent != null ? mNewTaskIntent : mIntent, mVoiceSession, 
  10.                         mVoiceInteractor, !mLaunchTaskBehind /* toTop */, mStartActivity.mActivityType); 
  11.                 //其他代碼略 
  12.             } 
  13.         } 
  14.     } 

3、ActivityStack

ActivityStack,內部維護了一個ArrayList,用來管理TaskRecord;

  1. class ActivityStack<T extends StackWindowController> extends ConfigurationContainer implements StackWindowListener { 
  2.         private final ArrayList<TaskRecord> mTaskHistory = new ArrayList<>();//使用一個ArrayList來保存TaskRecord 
  3.         final int mStackId; 
  4.         protected final ActivityStackSupervisor mStackSupervisor;//持有一個ActivityStackSupervisor,所有的運行中的ActivityStacks都通過它來進行管理 
  5.         //構造方法 
  6.         ActivityStack(ActivityStackSupervisor.ActivityDisplay display, int stackId, 
  7.                       ActivityStackSupervisor supervisor, RecentTasks recentTasks, boolean onTop) { 
  8.         } 
  9.         TaskRecord createTaskRecord(int taskId, ActivityInfo info, Intent intent, 
  10.                                     IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, 
  11.                                     boolean toTop, int type) { 
  12.             //創建一個task 
  13.             TaskRecord task = new TaskRecord(mService, taskId, info, intent, voiceSession, voiceInteractor, type); 
  14.             //將task添加到ActivityStack中去 
  15.             addTask(task, toTop, "createTaskRecord"); 
  16.             //其他代碼略 
  17.             return task; 
  18.         } 
  19.         //添加Task 
  20.         void addTask(final TaskRecord task, final boolean toTop, String reason) { 
  21.             addTask(task, toTop ? MAX_VALUE : 0, true /* schedulePictureInPictureModeChange */, reason); 
  22.             //其他代碼略 
  23.         } 
  24.         //添加Task到指定位置 
  25.         void addTask(final TaskRecord task, int position, boolean schedulePictureInPictureModeChange, 
  26.                      String reason) { 
  27.             mTaskHistory.remove(task);//若存在,先移除 
  28.             //... 
  29.             mTaskHistory.add(position, task);//添加task到mTaskHistory 
  30.             task.setStack(this);//為TaskRecord設置ActivityStack 
  31.             //... 
  32.         } 
  33.         //其他代碼略 
  34.     } 
  • 看到ActivityStack使用了一個ArrayList來保存TaskRecord;
  • 另外,ActivityStack中還持有ActivityStackSupervisor對象,這個是用來管理ActivityStacks的;
  • ActivityStack是由ActivityStackSupervisor來創建的,實際ActivityStackSupervisor就是用來管理ActivityStack的,繼續看下面的ActivityStackSupervisor分析;

4、ActivityStackSupervisor

ActivityStackSupervisor,顧名思義,就是用來管理ActivityStack的;

  1. ActivityStackSupervisor,顧名思義,就是用來管理ActivityStack的; 
  2.     public class ActivityStackSupervisor extends ConfigurationContainer implements DisplayListener { 
  3.         ActivityStack mHomeStack;//管理的是Launcher相關的任務 
  4.         ActivityStack mFocusedStack;//管理非Launcher相關的任務 
  5.         //創建ActivityStack 
  6.         ActivityStack createStack(int stackId, ActivityStackSupervisor.ActivityDisplay display, boolean onTop) { 
  7.             switch (stackId) { 
  8.                 case PINNED_STACK_ID: 
  9.                     //PinnedActivityStack是ActivityStack的子類 
  10.                     return new PinnedActivityStack(display, stackId, this, mRecentTasks, onTop); 
  11.                 default
  12.                     //創建一個ActivityStack 
  13.                     return new ActivityStack(display, stackId, this, mRecentTasks, onTop); 
  14.             } 
  15.         } 
  16.     } 
  • ActivityStackSupervisor內部有兩個不同的ActivityStack對象:mHomeStack、mFocusedStack,用來管理不同的任務;
  • ActivityStackSupervisor內部包含了創建ActivityStack對象的方法;
  • AMS初始化時會創建一個ActivityStackSupervisor對象;

二、啟動流程和啟動模式看任務棧

1、啟動流程

啟動Activity過程中涉及到的ActivityStack、TaskRecord、ActivityRecord、ActivityStackSupervisor進行簡單的分析,實際上一張時序圖就可以看明白了

  • startActivity時首先會創建一個ActivityRecord。
  • 如果有需要,會創建一個TaskRecord,并把這個TaskRecord加入到ActivityStack中。
  • 將ActivityRecord添加到TaskRecord的棧頂

2、啟動模式中的任務棧

①standerd

默認模式,每次啟動Activity都會創建一個新的Activity實例

現在有個A Activity,我們在A上面啟動B,再然后在B上面啟動A,其過程如圖所示

②singleTop

  • 如果要啟動的Activity已經在棧頂,則不會重新創建Activity,只會調用該該Activity的onNewIntent()方法。
  • 如果要啟動的Activity不在棧頂,則會重新創建該Activity的實例;

現在有個A Activity,我們在A以standerd模式上面啟動B,然后在B上面以singleTop模式啟動A,其過程如圖所示,這里會新創建一個A實例

B上面以singleTop模式啟動B的話,則不會重新創建B,只會調用onNewIntent()方法,其過程如圖所示

③singleTask

  • 如果要啟動的Activity已經存在于它想要歸屬的棧中,那么不會創建該Activity實例,將棧中位于該Activity上的所有的Activity出棧,同時該Activity的onNewIntent()方法會被調用。
  • 如果要啟動的Activity不存在于它想要歸屬的棧中,并且該棧存在,則會創建該Activity的實例。
  • 如果要啟動的Activity想要歸屬的棧不存在,則首先要創建一個新棧,然后創建該Activity實例并壓入到新棧中

現在有個A Activity,我們在A以standerd模式上面啟動B,然后在B上面以singleTask模式啟動A,其過程如圖所示

④singleInstance

基本和singleTask一樣,不同的是啟動Activity時,首先要創建在一個新棧,然后創建該Activity實例并壓入新棧中,新棧中只會存在這一個Activity實例;

現在有個A Activity,我們在A以singleInstance模式上面啟動B,其過程如圖所示:

3、啟動Flag

startActivity()時往Intent 中加入相應的標志來指定啟動模式,這種方式的優先級會比在AndroidManifest中定義的優先級高;但是AndroidManifest中只能定義四種啟動方式:standard、singleTop、singleTask、singleInstance,而Intent的flag則有很多種。具體的可以看看文檔,我們這里看看部分flag:

  • FLAG_ACTIVITY_NEW_TASK :跟launchMode中的singleTask一樣。
  • FLAG_ACTIVITY_SINGLE_TOP :跟launchMode中的singleTop一樣。
  • FLAG_ACTIVITY_CLEAR_TOP :launchMode中沒有對應的值,如果要啟動的Activity已經存在于棧中,則將所有位于它上面的Activity出棧。singleTask默認具有此標記位的效果【責任編輯:武曉燕 TEL:(010)68476606】

 

責任編輯:武曉燕 來源: Android開發編程
相關推薦

2021-08-27 07:38:21

AndroidDialogContext

2009-03-24 08:30:54

AndroidGoogle移動os

2009-03-24 09:17:58

驅動GSMAndroid

2009-09-28 10:39:01

Hibernate基礎

2009-09-25 14:23:39

2013-12-04 10:21:38

AndroidAndroidMani

2010-02-06 15:19:35

2009-06-18 14:00:51

2009-09-09 09:48:43

Linq延遲加載

2009-10-10 13:52:57

VB Update方法

2009-09-14 16:21:34

LINQ To XML

2009-09-14 13:50:35

LINQ編程模型

2010-01-06 13:50:37

.NET Framew

2009-11-20 13:11:44

Oracle XML數

2009-09-08 15:56:50

Linq使用Group

2010-04-26 18:17:19

Oracle存儲過程

2009-12-07 15:37:00

WCF控件

2009-12-16 14:09:14

Visual Stud

2009-09-07 13:19:44

C#線程同步

2009-09-04 15:43:07

C#流模型
點贊
收藏

51CTO技術棧公眾號

日本亚洲三级在线| 国产96在线亚洲| 国产精品视频免费| 91久久久久久久久久久久久| 欧美黄片一区二区三区| 西野翔中文久久精品字幕| 日本韩国精品在线| 三级在线免费观看| 天堂av在线资源| 久久成人精品无人区| 国产69精品久久久久9| 日韩福利在线视频| 欧美一级大片在线视频| 91福利国产成人精品照片| 日韩video| 狠狠狠综合7777久夜色撩人| 国产成人免费视频网站高清观看视频| 国产999精品视频| 青青草激情视频| 欧美人与牛zoz0性行为| 亚洲电影免费观看高清完整版在线观看 | 一区二区三区在线视频播放| 欧美一区免费视频| 超碰在线观看av| 另类调教123区 | www.久久热| 色噜噜狠狠色综合欧洲selulu| 美女av免费观看| 91亚洲欧美| 成人国产一区二区三区精品| 91精品视频观看| 亚洲婷婷久久综合| 麻豆久久精品| 97国产真实伦对白精彩视频8| 国产老头老太做爰视频| 精品国产一区探花在线观看 | 日本黄色免费观看| 看亚洲a级一级毛片| 欧美色视频在线观看| 国产精品亚洲a| 91破解版在线观看| 亚洲高清视频的网址| 免费看黄色a级片| 日本中文字幕在线观看| 国产免费久久精品| 欧美亚洲爱爱另类综合| 日本午夜在线视频| 26uuu成人网一区二区三区| 国产一区二区无遮挡| 免费激情视频网站| 国产成人亚洲综合a∨婷婷图片| 成人免费看片视频| 97超碰人人模人人人爽人人爱| 日韩精品91亚洲二区在线观看| 欧美怡红院视频一区二区三区| www..com国产| 在线日韩视频| 欧美性受xxx| 国产三级精品三级在线观看| 免费看黄裸体一级大秀欧美| 全球成人中文在线| 久久久久久久久黄色| 一本色道精品久久一区二区三区| 2025国产精品视频| 亚洲图片在线视频| 日本欧美在线观看| 国产美女高潮久久白浆| 国产又大又黑又粗| 国产精品66部| 国产一区二区久久久| 日韩偷拍自拍| 国产视频911| 一区二区三区久久网| 国产cdts系列另类在线观看| 一区二区日韩av| 久久精品国产sm调教网站演员| 热三久草你在线| 91精品1区2区| 久久久精品高清| 亚洲国产欧美在线观看| 日韩大片在线观看视频| 一二三四国产精品| 自拍偷拍欧美| 91成人天堂久久成人| 国产一级片免费在线观看| 久久av老司机精品网站导航| 99久久99久久精品国产片| 天天av天天翘| 国产精品天干天干在观线| 激情视频小说图片| 日本免费久久| 欧美一区二区免费视频| 亚洲一级中文字幕| 99热在线成人| 欧美在线视频一区二区| 97精品人妻一区二区三区| 成人午夜视频免费看| 欧美日韩亚洲一区二区三区四区| 国产一二三区在线观看| 欧美色道久久88综合亚洲精品| 久久婷五月综合| 成人香蕉社区| 久久人体大胆视频| 国产又大又黄视频| 国产一区二区三区视频在线播放| 鲁丝一区二区三区免费| 成人在线播放免费观看| 一本久道中文字幕精品亚洲嫩| 日韩av加勒比| 国产一区二区三区四区五区 | 国产在线拍揄自揄拍| 日本亚洲天堂网| 精品视频第一区| 国产cdts系列另类在线观看| 欧美在线你懂得| 男男做爰猛烈叫床爽爽小说 | 久久久亚洲国产| 中文字幕一区二区久久人妻| 成人av在线一区二区三区| 一区二区91美女张开腿让人桶| 国产伦理精品| 日韩欧美精品在线视频| www中文在线| 日韩国产精品久久| 含羞草久久爱69一区| 91香蕉在线观看| 欧美日韩三级一区| 全黄一级裸体片| 国产一区二区三区久久久久久久久| 成人欧美一区二区三区在线湿哒哒| 国产女主播在线写真| 天天综合色天天综合| 少妇伦子伦精品无吗| 伊人情人综合网| 成人激情在线观看| 日本亚洲精品| 欧美日韩精品二区第二页| 免费黄色在线视频| 国产精品一二| 国产一区在线免费| heyzo在线播放| 精品久久99ma| 久草国产在线观看| 国产成人精品免费网站| 一本色道久久88亚洲精品综合| 一区在线不卡| 欧美成人一区在线| www.精品视频| 亚洲制服丝袜av| 特级特黄刘亦菲aaa级| 国内久久视频| 精品欧美日韩| 天堂av中文在线观看| 亚洲精品videossex少妇| 国产无遮挡裸体免费视频| 成人免费不卡视频| 免费看国产一级片| 你懂的一区二区三区| 国产成人综合久久| xxxxx日韩| 91精品国产福利在线观看| 手机在线免费看毛片| 国产精品18久久久久久vr| 欧美一级免费播放| 久久99国产精品久久99大师| 国产91|九色| 国产高清视频在线| 欧美日韩aaaaa| 欧美日韩一级大片| 成人福利视频网站| 少妇高清精品毛片在线视频| 不卡一区综合视频| 亚洲综合第一页| xxx性欧美| 亚洲欧美精品在线| 亚洲一区二区色| 亚洲精品视频在线| 捆绑裸体绳奴bdsm亚洲| 日韩av电影一区| 操bbb操bbb| 亚洲宅男一区| 91免费精品视频| 国产精品论坛| 视频在线观看一区二区| 亚洲精品综合久久| 在线观看www91| 黄色在线观看免费| 久久精品日韩一区二区三区| 亚洲网中文字幕| 亚洲综合精品| 正在播放91九色| 日韩高清影视在线观看| 国产欧美一区二区| av在线播放资源| 久久久国产影院| 日本不卡视频一区二区| 91精品国产91热久久久做人人| 日韩精品在线免费视频| 最近中文字幕一区二区三区| 亚洲熟女乱综合一区二区三区| 久久9热精品视频| 欧美女人性生活视频| 一区二区三区在线观看免费| 欧美亚洲爱爱另类综合| 久久久免费毛片| 成人久久18免费网站图片| 性xxxxfreexxxxx欧美丶| 久久精品国产清自在天天线| 嫩草精品影院| 精品国免费一区二区三区| 糖心vlog精品一区二区| 亚洲成人av电影在线| 国产稀缺精品盗摄盗拍| 国产三级欧美三级日产三级99 | 91黑丝在线观看| 久cao在线| 伊人伊人伊人久久| 天天干免费视频| 精品久久久久久久人人人人传媒| 亚洲一卡二卡在线观看| 欧美综合视频在线观看| 在线天堂中文字幕| 亚洲电影一区二区| 欧美xxxx黑人xyx性爽| 中文字幕一区二区三区精华液| 成年人在线观看av| av色综合久久天堂av综合| 韩国av中国字幕| 国产麻豆视频一区| 伊人成人222| 麻豆91精品视频| 欧美精品性生活| 久久精品亚洲一区二区| 欧美 日韩 国产一区| 亚洲国产一区二区三区高清| av一区二区三区免费观看| 综合激情视频| 麻豆映画在线观看| 正在播放日韩欧美一页| 在线视频精品一区| 国产精品二区不卡| 永久久久久久| 天天综合久久| 无码毛片aaa在线| 一区二区中文| 久久男人资源站| 亚洲一本视频| 777精品久无码人妻蜜桃| 一区在线免费| 国产美女网站在线观看| 国产一区91| 十八禁视频网站在线观看| 午夜在线播放视频欧美| 成人免费无码av| 人禽交欧美网站| 一区二区三区欧美精品| 国产精品夜夜嗨| 91精品啪在线观看国产| 2023国产一二三区日本精品2022| av在线网站观看| 欧美国产乱子伦| 看免费黄色录像| 亚洲午夜精品17c| 青青草成人av| 欧美亚洲动漫精品| 国产精品视频无码| 欧美成人精品二区三区99精品| 刘亦菲毛片一区二区三区| 日韩电影中文 亚洲精品乱码| 男男激情在线| 久久香蕉频线观| 久草在线视频网站| 日韩美女中文字幕| 欧美日韩视频免费看| 91精品国自产在线观看| 国产伦理久久久久久妇女 | 亚洲色图88| 91九色丨porny丨国产jk| 日韩激情一二三区| 久久国产精品国产精品| 成人精品一区二区三区中文字幕| 无码人妻精品一区二区三区温州 | 亚洲一区高清| 激情欧美一区二区三区| 三年中国国语在线播放免费| 国产精品亚洲一区二区三区妖精 | xxww在线观看| 成人美女视频在线观看| 亚洲色图 激情小说| 亚洲一线二线三线视频| 中文字幕免费高清网站| 日韩欧美一区二区免费| 玖玖综合伊人| 欧美激情图片区| 深夜视频一区二区| 国产精品久久久久免费 | 国产av熟女一区二区三区| 久热精品在线| 年下总裁被打光屁股sp| 国产欧美1区2区3区| 久草视频在线免费看| 欧美在线free| 神马亚洲视频| 欧美国产日产韩国视频| 看片一区二区| 开心色怡人综合网站| 亚洲一级特黄| 中文字幕1234区| 欧美高清在线一区二区| 久久久久久久久久免费视频| 日韩欧美激情一区| 香蕉视频网站在线观看| 国产97色在线|日韩| 精品淫伦v久久水蜜桃| 日韩精品第1页| 另类综合日韩欧美亚洲| 波多野结衣一本| 午夜精品免费在线观看| 精品人妻少妇嫩草av无码专区| 少妇高潮 亚洲精品| 88xx成人网| 日本一区二区三区视频免费看| 99热免费精品| wwwxx日本| 一区二区在线观看av| 一级日韩一级欧美| 亚洲深夜福利视频| 中国色在线日|韩| 精品麻豆av| 国产午夜精品一区二区三区欧美 | 国产精选久久久| 在线看欧美日韩| 久久天堂av| 日韩欧美一区二区三区久久婷婷| 麻豆91精品| 无码人妻丰满熟妇啪啪欧美| 欧美在线视频你懂得| a视频网址在线观看| 国产精品男女猛烈高潮激情| 国产精品自拍区| 成人一区二区三| 国产女人水真多18毛片18精品视频| 波多野结衣网站| 在线a欧美视频| 黄色精品视频网站| 色姑娘综合网| 久久se这里有精品| 国产精品嫩草影院俄罗斯| 91麻豆精品国产自产在线观看一区 | 91色porny| 国产性生活视频| 最近2019年手机中文字幕| 欧美xxxx网站| 法国空姐在线观看免费| 福利视频网站一区二区三区| 久久精品国产av一区二区三区| 亚洲精品videossex少妇| 亚洲免费福利| 日韩在线观看电影完整版高清免费| 日韩vs国产vs欧美| 国产一级淫片久久久片a级| 欧美精品一二三区| 欧美videosex性欧美黑吊| 国产女主播一区二区三区| 国产精品亚洲产品| 日本免费www| 欧美一区中文字幕| 超碰在线97国产| 欧美一级片免费观看| 美女国产一区二区| 欧美成人aaa片一区国产精品| 亚洲精品在线三区| 刘亦菲一区二区三区免费看| 色视频一区二区三区| 韩国成人精品a∨在线观看| 久久久无码精品亚洲国产| 亚洲区在线播放| 国产精品一区免费在线| 800av在线免费观看| 91网页版在线| 国产精品自偷自拍| 97**国产露脸精品国产| 99国产**精品****| 中国xxxx性xxxx产国| 欧美综合一区二区| 好吊日av在线| 亚洲高清在线播放| 成人激情免费电影网址| 天堂免费在线视频| 久久久久久久久久久91| 三上亚洲一区二区| 亚洲欧美日韩偷拍| 欧美日韩一级片在线观看| av伦理在线| 伊人久久大香线蕉午夜av| 91免费看片在线观看| 国产乱叫456在线| 国产成人jvid在线播放| 欧美日韩a区| 国产在视频线精品视频|