精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产又粗又猛又色| 欧美禁忌电影| 亚洲精品国产成人影院| 亚洲国产日韩在线一区模特| 精品国产a毛片| 欧美一区二区三区电影在线观看| 老熟妇高潮一区二区三区| 超碰激情在线| 亚洲色图插插| 欧美性猛片aaaaaaa做受| 国产三区精品| 日韩激情小视频| 成人三级av在线| 亚洲男人的天堂在线观看| 国产精品 欧美在线| 大黑人交xxx极品hd| 99热99re6国产在线播放| 国产一区二区三区四区在线观看 | 日本人体一区二区| 国产乱色精品成人免费视频 | 亚洲精品电影网| 国产成人生活片| 国产精品人人爽| 国产一区二区三区久久久久久久久 | 麻豆精品一区二区三区视频| 成人不卡视频| 久久久电影一区二区三区| 久久久欧美精品| 精品久久久久久无码人妻| 91亚洲天堂| 国产精品一区专区| 欧美大片网站在线观看| 中文字幕一二三区| 女同视频在线观看| 成人18视频日本| 91精品国产高清自在线 | 95精品视频在线| 久久久久久久成人| 天天插天天射天天干| 亚洲一区二区小说| 亚洲综合久久久| 国产欧美日韩在线播放| 国产精品一区二区人人爽| 国产精品日韩精品欧美精品| 久久999免费视频| 无码国产精品一区二区免费式直播 | 99久久精品免费看| 亚洲一区二区三区在线免费观看 | 亚洲精品视频免费看| 色乱码一区二区三在线看| 日韩黄色一级视频| 日本女优一区| 日韩一本二本av| 精品少妇人妻av免费久久洗澡| 无码国产精品高潮久久99| 久久久久久夜| 精品国产一区二区三区久久狼黑人| 超碰在线免费av| 天堂av资源在线观看| 不卡一区二区在线| 国产经典一区二区三区| 伊人中文字幕在线观看| 91亚洲成人| 亚洲电影av在线| 亚洲色图38p| 调教一区二区| 亚洲激情图片一区| 人禽交欧美网站免费| 日本福利在线观看| 国产专区欧美精品| 91香蕉电影院| youjizz在线视频| 麻豆久久精品| 国产精品美女在线观看| www.av视频在线观看| 欧美精品一区二区三区精品| 日韩美女一区二区三区四区| 国产精品人人妻人人爽人人牛| 精品国产免费人成网站| 亚洲男人天堂av| www.av蜜桃| 免费高清在线观看| 久久精品一区二区| 日本一区二区精品视频| 日本精品一区二区三区在线播放| 99久久精品久久久久久清纯| 欧美日韩精品综合| 国模私拍视频在线| 国产在线视频一区二区三区| 亚洲一区二区中文字幕| 91久久久亚洲精品| 在线观看色网站| 激情成人亚洲| 综合久久五月天| 91av在线免费| 精品视频亚洲| 美日韩丰满少妇在线观看| 国产亚洲精品熟女国产成人| 一级毛片精品毛片| 6080国产精品一区二区| 九色porny91| 激情综合婷婷| 巨乳诱惑日韩免费av| 五月综合激情日本mⅴ| 四虎免费在线观看视频| 懂色av中文在线| 91丨九色丨蝌蚪富婆spa| 99久久久精品免费观看国产| 91亚洲精品国偷拍自产在线观看| 久久精品免费| 91中文在线视频| 色视频在线看| 亚洲女爱视频在线| www.日日操| 性猛交xxxx| 欧美日韩一区二区高清| 一区二区三区日韩在线| 中日韩精品一区二区三区| 豆花视频一区二区| 日韩欧美不卡在线观看视频| 爱爱的免费视频| 欧美伊人影院| 九九久久久久99精品| 黄色片中文字幕| 国产高清在线观看免费不卡| 96久久精品| 亚洲精品国产手机| 欧美在线不卡| 一区二区高清在线| 免费毛片小视频| 国产高清中文字幕在线| 91精品国产入口| 亚洲制服在线观看| 日本一区二区三区播放| 日韩三级视频中文字幕| 少妇视频在线播放| 久久久久美女| 国产精品美女无圣光视频| 污污网站在线免费观看| 亚洲综合999| 国产中文欧美精品| 在线精品视频播放| 成人91在线| 欧洲美女免费图片一区| 波多野结衣网站| av欧美精品.com| 日本不卡久久| 成人性生活av| 亚洲成人精品视频| 国产无码精品一区二区| 国产高清在线精品| 国产尤物av一区二区三区| 91高清视频在线观看| 欧美一区二区三区视频在线| 手机在线中文字幕| 亚洲全部视频| 国产成人精品视频在线| 天堂在线免费av| 日本一二三四高清不卡| 777久久精品一区二区三区无码| 四虎国产精品成人免费影视| 欧美电影免费提供在线观看| 欧洲猛交xxxx乱大交3| 国产激情一区二区三区四区| 一道本在线观看视频| 精品国产乱码一区二区三区| 欧美成人精品影院| 人妻夜夜爽天天爽| 国产欧美视频一区二区三区| 日韩专区第三页| 日韩欧洲国产| 97精品伊人久久久大香线蕉 | 色综合天天在线| 三上悠亚av一区二区三区| 亚洲日本视频在线| 国产做受高潮69| 欧美xxx.com| 一区二区三区四区中文字幕| 野花视频免费在线观看| 亚洲高清二区| 欧美日韩国产高清视频| 欧美成人福利| 国产视频亚洲精品| a级片在线观看免费| 国产宾馆实践打屁股91| 五码日韩精品一区二区三区视频| 欧美另类激情| 色综合天天综合网国产成人网| 色婷婷视频在线| 一区二区三区精品在线| 亚洲国产精品第一页| 久久久xxx| 91免费网站视频| 国产一区二区三区不卡av| 国产成人精品优优av| 国产日产一区二区| 欧美日韩一区在线观看| 欧美老熟妇乱大交xxxxx| 在线日本成人| 色999五月色| 日韩欧美中文在线观看| 日本成熟性欧美| av毛片在线看| 亚洲区在线播放| 免费在线不卡视频| 成人一级视频在线观看| 亚洲色婷婷久久精品av蜜桃| 台湾佬综合网| 2019精品视频| 91丨九色丨蝌蚪丨对白| 午夜精品久久久久久久蜜桃app | 九热爱视频精品视频| 成人深夜直播免费观看| 福利片在线看| 精品国产1区2区3区| 亚洲视频久久久| 激情久久av一区av二区av三区| 国产视频精品视频| 美女任你摸久久 | 亚州av乱码久久精品蜜桃| 精品国产一区二区三区麻豆免费观看完整版 | 在线免费观看中文字幕| 天天影视涩香欲综合网 | 一本在线高清不卡dvd| 欧美日韩在线视频免费播放| 欧美激情在线一区二区| 99久久免费看精品国产一区| 亚洲国产综合在线看不卡| 中文有码久久| 日韩视频在线直播| 国产精品一区二区三区在线播放| 1区2区3区在线观看| 欧美日韩另类国产亚洲欧美一级| 一区二区三区四区免费| 懂色av噜噜一区二区三区av| 亚洲欧美国产中文| 日韩精品电影在线观看| 亚洲激情啪啪| 91丨精品丨国产| 国产精品美女无圣光视频| 伊人色综合一区二区三区影院视频| 欧美激情精品久久久久久黑人| 国产黄色小视频在线| 日韩欧美亚洲国产精品字幕久久久 | 91精品二区| 国产精品av免费| 欧美gvvideo网站| 视频一区不卡| 成人激情诱惑| 亚洲视频欧美在线| 国产一区精品二区| 久久噜噜噜精品国产亚洲综合| 国产最新在线| 欧美精品在线网站| 2024短剧网剧在线观看| 久久色免费在线视频| 少妇人妻精品一区二区三区| 精品国产成人系列| 姝姝窝人体www聚色窝| 亚洲а∨天堂久久精品9966| 欧美 日韩 人妻 高清 中文| 精品国产乱码久久久久久久| 黄色片一区二区三区| 亚洲国产高潮在线观看| 色视频免费在线观看| 国产亚洲激情视频在线| 99久久免费国产精精品| 欧美日韩另类视频| 97在线观看免费高| 亚洲精选免费视频| 久久久一区二区三区四区| 久久久久99精品国产片| 亚洲精品成人无码| 欧美高清在线一区| 日韩一级片大全| 久久在线免费观看| 国产91在线免费观看| 97人人在线视频| 亚洲欧美日韩国产手机在线| 国产中文av在线| 亚洲视频在线观看三级| 久久国产精品无码一级毛片 | 欧美日韩成人高清| 国产熟女一区二区丰满| 精品三级在线观看| 在线观看中文字幕码| 91精品久久久久久久久99蜜臂| 精品国产乱码一区二区三| 在线欧美日韩国产| 中日韩精品视频在线观看| 亚洲猫色日本管| 国产午夜视频在线| 亚洲人成网站色在线观看| 清纯粉嫩极品夜夜嗨av| 国产欧美日韩麻豆91| 99鲁鲁精品一区二区三区| 亚洲国产精品嫩草影院| 樱花视频在线免费观看| 欧美一区二区播放| 撸视在线观看免费视频| 久久影院模特热| 一区二区三区四区日本视频| 91超碰在线电影| 国产免费久久| 日本一区二区三区视频免费看| 国产精品视频| 国产高清在线精品一区二区三区| 欧美日韩导航| 国产精品成av人在线视午夜片 | 欧美 国产 日本| 操你啦在线视频| 久久久免费av| 国产高清不卡av| 波多野结衣绝顶大高潮| 欧美网站一区二区| 黄色小视频免费观看| 在线精品国产成人综合| sm捆绑调教国产免费网站在线观看| 国产精品电影观看| 91精品国产乱码久久久久| 欧美一区二区三区免费| 国模吧精品人体gogo| 在线日韩一区二区| 精品人妻少妇AV无码专区| 亚洲系列中文字幕| 17videosex性欧美| 成人亚洲综合色就1024| 精品日韩免费| 极品美女扒开粉嫩小泬| 国产精品白丝jk白祙喷水网站| 亚洲精品成人av久久| 天天影视网天天综合色在线播放| 国产sm主人调教女m视频| 制服丝袜成人动漫| 福利视频在线导航| 欧美亚洲国产另类| jizz久久精品永久免费| 午夜啪啪福利视频| 欧美午夜精品| 91香蕉国产线在线观看| 国产精品女人毛片| 在线免费日韩av| 精品视频一区二区三区免费| 欧美老女人性开放| 97视频国产在线| 国产精品jk白丝蜜臀av小说| 国产一区二区三区播放| 国产一区三区三区| 国产精品三区在线观看| 3d动漫精品啪啪1区2区免费| 天堂资源在线中文| 国产精品直播网红| 久久麻豆精品| 日韩欧美亚洲另类| 成人毛片在线观看| 国产一级中文字幕| 精品国产区一区| 美女日批视频在线观看| 91成人免费观看| 国产精品s色| 国产免费黄色小视频| 成人午夜激情片| 日韩免费视频网站| 日韩精品999| 免费在线看黄| 91久久精品美女| 在线看片不卡| www.com日本| 五月婷婷欧美视频| 猫咪在线永久网站| 国产日韩欧美91| 欧美不卡在线| 日本黄色动态图| 91福利在线播放| 男人天堂一区二区| 91超碰caoporn97人人| 久久av免费看| 亚洲精品综合在线观看| 亚洲另类中文字| 手机在线精品视频| 国产精品久久999| 伊人久久大香线蕉综合四虎小说| 中文字幕制服丝袜| 日韩一区欧美一区| www.com亚洲| 亚洲精品一区二区三区精华液| freexxx性亚洲精品| 日本在线播放一区| 99香蕉国产精品偷在线观看| 少妇愉情理伦片bd| 午夜国产精品一区| 北岛玲一区二区三区| 欧美中文字幕在线观看| 第一会所亚洲原创| 国产ts在线观看| 色丁香久综合在线久综合在线观看| 欧美日本高清| 久久久久欧美| 亚洲精品1234| 1024在线看片|