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

Android進階之Activity啟動模式和應用場景詳解

移動開發 Android
Activity 作為 Android 四大組件之一,幾乎是被接觸得最多的;Android對Activity的管理,Android采用Task來管理多個Activity,當我們啟動一個應用時,Android就會為之創建一個Task,然后啟動這個應用的入口Activity;

[[416944]]

本文轉載自微信公眾號「Android開發編程」,作者Android開發編程。轉載本文請聯系Android開發編程公眾號。

前言:

Activity 作為 Android 四大組件之一,幾乎是被接觸得最多的;Android對Activity的管理,Android采用Task來管理多個Activity,當我們啟動一個應用時,Android就會為之創建一個Task,然后啟動這個應用的入口Activity;

在開發實際項目中會包含著多個Activity,系統中使用任務棧來存儲創建的Activity實例,任務棧是一種“后進先出”的棧結構。舉個栗子,若我們多次啟動同一個Activity,系統會創建多個實例依次放入任務棧中,當按back鍵返回時,每按一次,一個Activity出棧,直到棧空為止,當棧中;

無任何Activity,系統就會回收此任務棧;

因此在Android基礎中,Activity的啟動模式非常重要;

本文將全面詳細介紹 Activity的啟動模式

一、任務和任務棧詳解

1、Android中任務詳解

①任務是指在執行特定作業時與用戶交互的一系列 Activity。這些 Activity 按照各自的打開順序排列在堆棧(即返回棧)中。設備主屏幕是大多數任務的起點。當用戶觸摸應用啟動器中的圖標(或主屏幕上的快捷方式)時,該應用的任務將出現在前臺。如果應用不存在任務(應用最近未曾使用),則會創建一個新任務,并且該應用的“主”Activity 將作為堆棧中的根 Activity 打開;

②當前 Activity 啟動另一個 Activity 時,該新 Activity 會被推送到堆棧頂部,成為焦點所在。前一個 Activity 仍保留在堆棧中,但是處于停止狀態。Activity 停止時,系統會保持其用戶界面的當前狀態。用戶按“返回”按鈕時,當前 Activity 會從堆棧頂部彈出(Activity 被銷毀),而前一個 Activity 恢復執行(恢復其 UI 的前一狀態)。堆棧中的 Activity 永遠不會重新排列,僅推入和彈出堆棧:由當前 Activity 啟動時推入堆棧;用戶使用“返回”按鈕退出時彈出堆棧。因此,返回棧以“后進先出”對象結構運行;

③任務是一個有機整體,當用戶開始新任務或通過“主頁”按鈕轉到主屏幕時,可以移動到“后臺”。盡管在后臺時,該任務中的所有 Activity 全部停止,但是任務的返回棧仍舊不變,也就是說,當另一個任務發生時,該任務僅僅失去焦點而已。然后,任務可以返回到“前臺”,用戶就能夠回到離開時的狀態;

④由于返回棧中的 Activity 永遠不會重新排列,因此如果應用允許用戶從多個 Activity 中啟動特定 Activity,則會創建該 Activity 的新實例并推入堆棧中(而不是將 Activity 的任一先前實例置于頂部)。因此,應用中的一個 Activity 可能會多次實例化(即使 Activity 來自不同的任務)。

2、任務棧

(1)程序打開時就創建了一個任務棧, 用于存儲當前程序的activity,所有的activity屬于一個任務棧。

(2)一個任務棧包含了一個activity的集合, 去有序的選擇哪一個activity和用戶進行交互:只有在任務棧棧頂的activity才可以跟用戶進行交互。

(3)任務棧可以移動到后臺, 并且保留了每一個activity的狀態. 并且有序的給用戶列出它們的任務, 而且還不丟失它們狀態信息。

(4)退出應用程序時:當把所有的任務棧中所有的activity清除出棧時,任務棧會被銷毀,程序退出。

(5)每開啟一次頁面都會在任務棧中添加一個Activity,而只有任務棧中的Activity全部清除出棧時,任務棧被銷毀,程序才會退出,這樣就造成了用,戶體驗差, 需要點擊多次返回才可以把程序退出了。

(6)每開啟一次頁面都會在任務棧中添加一個Activity還會造成數據冗余, 重復數據太多, 會導致內存溢出的問題(OOM)。

為了解決任務棧的缺點,我們引入了啟動模式。

啟動模式(launchMode)在多個Activity跳轉的過程中扮演著重要的角色,它可以決定是否生成新的Activity實例,是否重用已存在的Activity實例,是否和其他Activity實例公用一個task里;

Activity 中有個啟動模式的概念,分別是 standard、singleTop、singleTask 以及 singleinstance。

二、啟動模式詳解

1、standard

standard 是標準啟動模式,當我們沒有指定 Activity 的啟動模式時,默認就是這種模式。在 standard 模式下,每次啟動一個 Activity 都會創建一個新的實例,它的 onCreate、onStart 以及 onResume均會被調用。這個新創建的 Activity將會放在啟動它的 Activity 所在的任務棧的棧頂。

比如 Activity A 在棧 S ,它啟動了 Activity B(standard 模式),那么 B 將會進入 A 所在的棧 S。

如果在沒有任務棧的情況下啟動 standard 模式的 Activity,比如在 Service 中,此時新的 Activity 沒有任務棧可入,會出現異常:

  1. Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 

此時應該為這個 Activity 指定 FLAG_ACTIVITY_NEW_TASK,這樣就會新建一個任務棧。

2、singleTop

singleTop 是棧頂復用模式。在這種模式下,如果新啟動的 Activity 已經在任務棧的棧頂了,那么就不會重新創建新的實例,而是調用這個 Activity 的 onPause、onNewIntent 以及 onResume 方法。如果新啟動的 Activity 不是位于棧頂,那么還是會重新創建。

比如現在棧內情況是 ABCD 四個Activity,A 位于棧底,D 位于棧頂。如果 D 的啟動模式為 singleTop,那么不會再次創建 D 的實例,棧內依然是 ABCD。

如果上面的 D 為 standard 啟動模式,那么棧內將變為 ABCDD。

3、singleTask

singleTask 是棧內復用模式。這是最復雜的一種模式,因為它可能涉及到多個棧。當一個具有 singleTask 模式的 Activity 啟動后,比如 Activity A,系統會首先尋找是否存在所需的任務棧,如果不存在,就重新創建一個任務棧,然后創建 A 的實例后把 A 放入到棧中。如果存在 A 所需要的任務棧,這時要看 A 是否在棧中有實例存在,如果有,那么系統就會把它調到棧頂并且調用它的 onNewIntent 方法,如果不存在,就創建 A 的實例并把 A 壓入棧中。這里所說的 A 所需要的任務棧是什么意思呢?其實 Activity 是可以指定自己想要的任務棧的名字的,通過一個參數:TaskAffinity,默認情況下,所有的 Activity 所需要的任務棧的名字為應用的包名。

如果任務棧 S1 中的情況為 ABC,這個時候 Activity D 以 singleTask 模式請求啟動,它需要的任務棧為 S2,由于 S2 和 D 的實例均不存在,所以系統就會先創建任務棧 S2,然后在創建 D 的實例并將其入棧到 S2

如果上面 D 所需的任務棧為 S1,那么因為 S1 已經存在,所以系統直接創建 D 的實例并且入棧到 S1。

如果 D 所需的任務棧為 S1,但是 S1 中的情況為 ADBC,此時 D 不會重新創建,而是把 D 切換到棧頂并調用 onNewIntent 方法。那 B 和 C 怎么辦?它們會全部出棧,相當于 clearTop 效果。

4、singleInstance

singleInstance 是單實例模式。這種模式是 singleTask 的加強版,它除了具有 singleTask 的所有特性外,還加強了一點,那就是此種模式的 Activity 只能單獨位于一個任務棧中。

比如 Activity A 是 singleInstance 模式,當 A 啟動后,系統會創建一個新的任務棧,然后 A 獨自在這個新的任務棧中,由于棧內復用的特性,后續的請求均不會創建新的 Activity,除非這個棧被銷毀了;

三、啟動模式設置詳解

啟動模式有2種設置方式:在AndroidMainifest設置、通過Intent設置標志位。

1、在AndroidMainifest的Activity配置進行設置

  1. <activity 
  2. android:launchMode="啟動模式" 
  3. //屬性 
  4. //standard:標準模式 
  5. //singleTop:棧頂復用模式 
  6. //singleTask:棧內復用模式 
  7. //singleInstance:單例模式 
  8. //如不設置,Activity的啟動模式默認為**標準模式(standard)** 
  9. </activity> 

2、通過Intent設置標志位

  1. Intent inten = new Intent (ActivityA.this,ActivityB.class); 
  2. intent.addFlags(Intent,FLAG_ACTIVITY_NEW_TASK); 
  3. startActivity(intent); 
  • FLAG_ACTIVITY_SINGLE_TOP:指定啟動模式為棧頂復用模式(SingleTop)
  • FLAG_ACTIVITY_NEW_TASK:指定啟動模式為棧內復用模式(SingleTask)
  • FLAG_ACTIVITY_CLEAR_TOP:所有位于其上層的Activity都要移除,SingleTask模式默認具有此標記效果;
  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:具有該標記的Activity不會出現在歷史Activity的列表中,即無法通過歷史列表回到該Activity上;

3、二者區別

Intent設置方式的優先級 > Manifest設置方式,即 以前者為準;

Manifest設置方式無法設定 FLAG_ACTIVITY_CLEAR_TOP;Intent設置方式 無法設置單例模式(SingleInstance);

四、啟動模式的實際應用場景

1. SingleTask模式的運用場景

最常見的應用場景就是保持我們應用開啟后僅僅有一個Activity的實例。最典型的樣例就是應用中展示的主頁(Home頁)。

假設用戶在主頁跳轉到其他頁面,運行多次操作后想返回到主頁,假設不使用SingleTask模式,在點擊返回的過程中會多次看到主頁,這明顯就是設計不合理了。

2. SingleTop模式的運用場景

假設你在當前的Activity中又要啟動同類型的Activity,此時建議將此類型Activity的啟動模式指定為SingleTop,能夠降低Activity的創建,節省內存!

3.SingleInstance模式的運用場景

SingleInstance是activity啟動的一種模式,一般做應用層開發很少用到,我一般用到的app定時提醒會用到這個模式吧。這個模式使用起來有很多坑,假設有activityA,activityB,activityC這三個activity,我們將activityB設置為SingleInstance

第一種情況

A開啟B,B開啟C,如果finish activityC,那么activityA會顯示而不是我們想要的activityB,這是因為activityB和activityA、activityC所處的棧不同,C關閉了,就要顯示C所處棧的下一個activity,解決這個問題辦法很多,我自己用的方法是通過記錄開啟activity,在被關閉的activity的finish方法中重新開啟activityB。

第二種情況

A開啟B,然后按home鍵,再從左面點開應用,顯示的是A,這是因為launch啟動我們應用的時候 會從默認的棧找到棧頂的activity顯示,這個解決辦法的思路跟第一種差不多,也就不獻丑了

第三種情況

A開啟C,C開啟B,B開啟A,結果顯示的是C,這還是兩個棧造成的,B開啟A的時候,其實是到達A所處的棧,棧頂是C,所以就顯示C了,解決辦法是用flag把默認棧activity清理了,重新開啟A,或者回退到C時再開啟A。

三種情況的解決方法都是基于頁面少的情況,如果頁面多了會產生更多的問題

為了必避免這個問題,最好不用在中間層使用SingleInstance

TIPS: (1)如果想讓C和B同一個棧,那就使用taskinfinity,給他倆設置同樣的棧名

(2)onActivityResult不能與SingleInstance不能一起使用,因為不同棧

4、standard 運用場景

Activity 的啟動默認就是這種模式。在 standard 模式下,每次啟動一個 Activity 都會創建一個新的實例;

在正常應用中正常打開和關閉頁面就可以了,退出整個app就關閉所有的頁面

5、Activity時的生命周期不同

由于當一個Activity設置了SingleTop或者SingleTask模式或者SingleInstance模式后,跳轉此Activity出現復用原有Activity的情況時,此Activity的onCreate方法將不會再次運行。onCreate方法僅僅會在第一次創建Activity時被運行。

而一般onCreate方法中會進行該頁面的數據初始化、UI初始化,假設頁面的展示數據無關頁面跳轉傳遞的參數,則不必操心此問題,若頁面展示的數據就是通過getInten() 方法來獲取,那么問題就會出現:getInten()獲取的一直都是老數據,根本無法接收跳轉時傳送的新數據!

這時我們須要另外一個回調 onNewIntent(Intent intent)方法。此方法會傳入最新的intent,這樣我們就能夠解決上述問題。這里建議的方法是又一次去setIntent。然后又一次去初始化數據和UI

/** 復用Activity時的生命周期回調*/

  1. @Override     
  2. protected void onNewIntent(Intent intent) {         
  3.     super.onNewIntent(intent);         
  4.     setIntent(intent);         
  5.     initData();         
  6.     initView();     

6、實際中的棧管理類

管理Activity的類,一般在BaseActivity會調用這個類,然后所有的Activity繼承BaseActivity,這樣管理好整個項目的Activity

  1. /** 
  2.  *  activity堆棧管理 
  3.  */ 
  4. public class ActivityStackManager { 
  5. private static ActivityStackManager mInstance; 
  6. private static Stack<Activity> mActivityStack; 
  7. public static ActivityStackManager getInstance() { 
  8.     if (null == mInstance) { 
  9.         mInstance = new ActivityStackManager(); 
  10.     } 
  11.     return mInstance; 
  12. private ActivityStackManager() { 
  13.     mActivityStack = new Stack<Activity>(); 
  14. /** 
  15.  * 入棧 
  16.  * 
  17.  * @param activity 
  18.  */ 
  19. public void addActivity(Activity activity) { 
  20.     mActivityStack.push(activity); 
  21. /** 
  22.  * 出棧 
  23.  * 
  24.  * @param activity 
  25.  */ 
  26. public void removeActivity(Activity activity) { 
  27.     mActivityStack.remove(activity); 
  28. /** 
  29.  * 徹底退出 
  30.  */ 
  31. public void finishAllActivity() { 
  32.     Activity activity; 
  33.     while (!mActivityStack.empty()) { 
  34.         activity = mActivityStack.pop(); 
  35.         if (activity != null) { 
  36.             activity.finish(); 
  37.         } 
  38.     } 
  39. /** 
  40.  * 結束指定類名的Activity 
  41.  * 
  42.  * @param cls 
  43.  */ 
  44. public void finishActivity(Class<?> cls) { 
  45.     for (Activity activity : mActivityStack) { 
  46.         if (activity.getClass().equals(cls)) { 
  47.             finishActivity(activity); 
  48.         } 
  49.     } 
  50. /** 
  51.  * 查找棧中是否存在指定的activity 
  52.  * 
  53.  * @param cls 
  54.  * @return 
  55.  */ 
  56. public boolean checkActivity(Class<?> cls) { 
  57.     for (Activity activity : mActivityStack) { 
  58.         if (activity.getClass().equals(cls)) { 
  59.             return true
  60.         } 
  61.     } 
  62.     return false
  63. /** 
  64.  * 結束指定的Activity 
  65.  * 
  66.  * @param activity 
  67.  */ 
  68. public void finishActivity(Activity activity) { 
  69.     if (activity != null) { 
  70.         mActivityStack.remove(activity); 
  71.         activity.finish(); 
  72.         activity = null
  73.     } 
  74. /** 
  75.  * finish指定的activity之上所有的activity 
  76.  * 
  77.  * @param actCls 
  78.  * @param isIncludeSelf 
  79.  * @return 
  80.  */ 
  81. public boolean finishToActivity(Class<? extends Activity> actCls, boolean isIncludeSelf) { 
  82.     List<Activity> buf = new ArrayList<Activity>(); 
  83.     int size = mActivityStack.size(); 
  84.     Activity activity = null
  85.     for (int i = size - 1; i >= 0; i--) { 
  86.         activity = mActivityStack.get(i); 
  87.         if (activity.getClass().isAssignableFrom(actCls)) { 
  88.             for (Activity a : buf) { 
  89.                 a.finish(); 
  90.             } 
  91.             return true
  92.         } else if (i == size - 1 && isIncludeSelf) { 
  93.             buf.add(activity); 
  94.         } else if (i != size - 1) { 
  95.             buf.add(activity); 
  96.         } 
  97.     } 
  98.     return false
  99. }} 

總結

1、以上就是Activity 的啟動模式和應用場景總結,除了 singleTask 稍微有點復雜,其它都很好理解

2、啟動模式事實上是實際應用中必須會的知識點,你不去使用而僅僅是學習并不是能夠掌握到精髓,僅僅有真正去使用才會將這些變成你自己的;

3、不懂的隨時可以發信息問我。

 

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

2021-08-16 17:15:19

設計模式Android適配器模式

2014-05-27 15:36:01

AndroidActivity啟動模式

2021-08-10 20:41:33

AndroidApp流程

2017-08-03 10:25:26

AndroidActivity

2020-02-12 14:42:00

GPU技術關鍵參數應用場景

2019-12-30 10:40:31

GPU技術應用

2021-08-23 06:27:46

AndroidctivitysetContentV

2021-04-27 08:31:10

前端應用場景

2021-04-21 09:21:07

zookeeper集群源碼

2018-08-15 09:48:27

數據庫Redis應用場景

2011-05-17 15:24:18

Shibboleth認證

2025-02-10 08:30:00

JavaScrip開發設計模式

2023-08-28 16:49:08

物聯網傳感器

2015-08-03 13:36:40

Docker技術優勢應用場景

2012-10-23 09:32:07

2021-09-02 07:00:01

Glide流程Android

2021-08-17 13:41:11

AndroidView事件

2016-03-24 14:02:05

ActivityAndroid啟動

2015-08-04 17:45:54

Docker應用

2021-09-02 18:47:02

redis存儲中間件Remote Dict
點贊
收藏

51CTO技術棧公眾號

极品人妻videosss人妻| 久操网在线观看| 在线免费观看一区二区| 先锋资源久久| 91精品国产福利在线观看| 伊人久久在线观看| 五月婷婷伊人网| 日本欧美在线观看| 欧美xxxx做受欧美| av鲁丝一区鲁丝二区鲁丝三区| 台湾佬中文娱乐久久久| 日韩美女视频一区| 精品久久久久亚洲| 在线观看亚洲一区二区| 伊人激情综合| 夜夜嗨av色一区二区不卡| 91香蕉国产线在线观看| 涩涩av在线| 亚洲免费三区一区二区| 欧美日本韩国国产| www.蜜臀av| 久久午夜精品| 久久免费福利视频| 亚洲欧美卡通动漫| 亲子伦视频一区二区三区| 欧美日韩国产区一| 国产一区二区三区精彩视频| 老司机99精品99| 91麻豆视频网站| 91中文字幕一区| 成人午夜精品视频| 亚洲日产国产精品| 久久成人18免费网站| 波多野结衣一二三四区| 精品国产一区二区三区成人影院| 欧美日韩国产大片| www.亚洲天堂网| 91福利区在线观看| 亚洲激情综合网| 亚洲午夜精品久久久久久浪潮| 亚洲av成人精品一区二区三区在线播放 | 黄网站在线播放| xnxx国产精品| 国产精品区一区二区三含羞草| 亚洲熟妇无码久久精品| 视频一区在线播放| 欧美影院在线播放| 日本熟妇一区二区| 欧美日韩伊人| 欧美精品一本久久男人的天堂| 免费成人深夜蜜桃视频| 精品日韩毛片| 亚洲欧美日韩爽爽影院| 超碰男人的天堂| 国产精品流白浆在线观看| 欧美一区二区视频在线观看2022| 中文字幕第36页| 午夜日韩成人影院| 在线观看一区不卡| 麻豆av免费在线| 一级毛片久久久| 福利一区视频在线观看| 女性女同性aⅴ免费观女性恋| 17videosex性欧美| 午夜欧美2019年伦理| 久久国产精品网| 少妇视频在线观看| 日韩欧美在线播放| 国产自偷自偷免费一区| 成人看片在线观看| 欧美日韩精品免费| 久久婷五月综合| 永久免费观看精品视频| 91精品午夜视频| 成人三级做爰av| 粉嫩的18在线观看极品精品| 日韩av一区二区在线| 瑟瑟视频在线观看| 欧美午夜精彩| 久久中文字幕在线| 国产亚洲精品久久777777| 在线日韩中文| 国产成人av网址| 91精品国产乱码久久| 国产乱淫av一区二区三区| 国产在线观看精品| 韩国中文字幕hd久久精品| 97久久超碰国产精品电影| 欧美久久久久久久| 伦xxxx在线| 亚洲成人综合在线| 欧美精品无码一区二区三区| 涩涩涩久久久成人精品| 欧美成人猛片aaaaaaa| 狠狠人妻久久久久久综合蜜桃| 色综合中文网| 另类美女黄大片| 日韩av一二三区| 免费看欧美美女黄的网站| 91在线观看欧美日韩| 日批免费在线观看| 国产精品日日摸夜夜摸av| av一区二区三区免费观看| 色资源二区在线视频| 555www色欧美视频| 亚洲人人夜夜澡人人爽| 91欧美国产| 久久全球大尺度高清视频| 日韩不卡高清视频| 高清成人在线观看| 亚洲高清在线播放| 成人影院在线视频| 欧美二区在线观看| mm131美女视频| 欧美高清一区| 国产成人精品视频在线| 亚洲第一色视频| 国产欧美一区二区精品性| 搞av.com| 999精品嫩草久久久久久99| 亚洲美女性生活视频| 青青草精品在线视频| 日韩国产欧美在线播放| 国产伦精品一区二区三区视频孕妇 | 国产1区2区3区4区| 日本免费新一区视频| 国产伦精品一区二区三区在线| 日韩精品黄色| 色婷婷精品久久二区二区蜜臂av| 国产精品嫩草69影院| 久久高清免费| 国产精品18久久久久久麻辣| 天堂在线视频免费观看| 一区二区三区四区高清精品免费观看| 在线免费视频一区| 久久99蜜桃| 欧美一级成年大片在线观看 | 久久国产精品99久久久久久老狼| 久久久7777| 超碰资源在线| 精品久久久久一区| 免费日韩在线视频| 国内不卡的二区三区中文字幕 | 久久性感美女视频| 国产精品久久一区| 国产福利免费在线观看| 欧美午夜久久久| 岛国精品资源网站| 亚洲高清在线| 国产在线精品一区二区三区》| 青春草视频在线观看| 91精品福利在线一区二区三区 | 久久视频在线| 国产伦精品一区二区三区精品视频| 国模精品一区二区| 91久久奴性调教| b站大片免费直播| 蘑菇福利视频一区播放| 久久综合久久久| 一级毛片久久久| 揄拍成人国产精品视频| 波多野结衣二区三区| 久久精品人人做| 黄色国产小视频| 欧美大片aaaa| 亚洲va电影大全| а√中文在线8| 精品日韩欧美在线| 国产69精品久久久久久久久久| 99久久伊人久久99| 欧美一级片中文字幕| 日韩在线视频精品| 97神马电影| freexxx性亚洲精品| 亚洲精品在线91| 最新国产中文字幕| 日韩理论片中文av| 欧美夫妇交换xxx| 天使萌一区二区三区免费观看| 三区精品视频| 国产精品视频一区二区三区综合| 久久99久久99精品免观看粉嫩| 黄频网站在线观看| 一本久久a久久精品亚洲| 精品少妇一区二区三区密爱| 国产成人久久精品77777最新版本| 草草视频在线免费观看| 香蕉视频一区| 成人观看高清在线观看免费| 午夜伦理在线视频| 亚洲久久久久久久久久久| 中文在线最新版天堂| 一区二区视频在线| 人妻丰满熟妇aⅴ无码| 蜜桃av一区二区三区| 妞干网在线播放| 欧美猛男同性videos| 91久久国产综合久久91精品网站| 成年男女免费视频网站不卡| 色噜噜国产精品视频一区二区| 免费看日韩av| 欧美日韩国产综合视频在线观看 | 国产精品草草| 欧美一区二区三区四区夜夜大片| 国语精品视频| 日本精品视频在线| fc2ppv国产精品久久| 亚洲开心激情网| 国产超碰人人模人人爽人人添| 精品日本高清在线播放| 国产精品99久久久久久成人| 91麻豆国产自产在线观看| 在线观看av免费观看| 久久久久久一区二区| 黄色片免费在线观看视频| 精品中文字幕一区二区三区av| 亚洲一区中文字幕在线观看| 日韩pacopacomama| 久久久人成影片一区二区三区观看| av在线播放网站| 日韩成人xxxx| 亚洲国产精品久久久久久久| 欧美三级视频在线| 免费视频久久久| 亚洲国产日日夜夜| 黄色录像二级片| 亚洲国产成人午夜在线一区| 久久偷拍免费视频| 高清国产一区二区| 性生活一级大片| 看国产成人h片视频| 欧美黄网站在线观看| 亚洲黄色成人| 国产精品videossex国产高清| 久久激情电影| 午夜精品视频在线观看一区二区| 亚洲动漫在线观看| 精品欧美一区二区三区久久久| 97久久综合区小说区图片区 | 91麻豆精品国产91久久久久推荐资源| 成人福利视频在线观看| 国产精品亚洲成在人线| 国产精品精品国产| 3d性欧美动漫精品xxxx软件| 2021国产精品视频| 亚洲十八**毛片| 91精品国产高清久久久久久久久| xxxx成人| 久久久久久综合网天天| 菠萝蜜视频在线观看www入口| 九色精品免费永久在线| 手机电影在线观看| 欧美激情18p| 国内高清免费在线视频| 久久久亚洲影院| 国产美女高潮在线观看| 91精品国产精品| 波多野结衣亚洲| 国产成人一区三区| jizz欧美| 成人精品在线视频| 日韩av综合| 国产精品久久久一区二区三区| 青草伊人久久| 国产成人亚洲欧美| 西野翔中文久久精品字幕| 日本一区二区三区www| 日韩综合在线| 麻豆md0077饥渴少妇| 亚洲视屏一区| 欧美牲交a欧美牲交aⅴ免费真| 日韩中文字幕亚洲一区二区va在线| 丁香婷婷激情网| 韩国一区二区在线观看| 日本泡妞xxxx免费视频软件| 不卡一区二区三区四区| 无码精品一区二区三区在线播放| 久久久久久久久久久99999| 男人的天堂官网| 亚洲男人的天堂在线aⅴ视频| 激情五月少妇a| 欧美日韩国产综合新一区 | 狂野欧美一区| 美女在线视频一区二区| 国产一区二区调教| www.四虎在线| 国产欧美一区视频| 黑鬼狂亚洲人videos| 婷婷夜色潮精品综合在线| 欧美另类高清videos的特点| 91精品国产综合久久久久久漫画 | 天天综合色天天综合色hd| 国产高清欧美| 少妇无码av无码专区在线观看| 奇米精品一区二区三区在线观看一 | 1234区中文字幕在线观看| 国产ts人妖一区二区三区| 高清一区二区| 久久久久久久久久久久久9999| 91综合在线| 欧美a在线视频| 韩国一区二区在线观看| 老牛影视av老牛影视av| 亚洲精品欧美二区三区中文字幕| 福利一区二区三区四区| 欧美三级视频在线观看| 四虎影视在线观看2413| 久久综合电影一区| 欧亚一区二区| 精品国产第一页| 97视频热人人精品免费| 男女午夜激情视频| 国产福利91精品| 中文字幕黄色网址| 欧美日韩视频在线| 国产成人麻豆精品午夜在线| 亚洲新中文字幕| 国产99在线| 99re国产| 天天操夜夜操国产精品| 午夜dv内射一区二区| 成人18视频在线播放| 男女性高潮免费网站| 欧美色图在线观看| 九色蝌蚪在线| 97视频在线观看免费| 精品一区二区三区中文字幕视频| 性欧美.com| 葵司免费一区二区三区四区五区| 无码成人精品区在线观看| 亚洲男人的天堂网| 国产精品一区二区av白丝下载| 伊人伊人伊人久久| 三级成人黄色影院| 精选一区二区三区四区五区| 午夜欧美理论片| 午夜一级免费视频| 国产精品卡一卡二| 中文在线观看免费高清| 一区二区欧美激情| 亚洲a∨精品一区二区三区导航| 蜜桃成人免费视频| 夜久久久久久| 国产免费一区二区三区最新6| 亚洲在线视频一区| 亚洲第一黄色片| 国外视频精品毛片| youjizz欧美| 青青草精品视频在线| 成人精品国产福利| 亚洲视频免费播放| 亚洲国产天堂久久国产91| a'aaa级片在线观看| 国产在线播放一区二区| 国产日韩欧美在线播放不卡| 三级电影在线看| 日本精品免费观看高清观看| 男人av在线| 国产精品丝袜高跟| 99久久夜色精品国产亚洲狼 | 在线高清欧美| 九九久久九九久久| 懂色中文一区二区在线播放| 亚洲精品在线观看av| 日韩av在线网| 国产亚洲一区二区手机在线观看| 婷婷久久伊人| 国产在线一区观看| 黄色小视频在线免费看| 日韩不卡在线观看| 欧美精品资源| 99re99热| 成人美女在线观看| 久久久久久在线观看| 中国日韩欧美久久久久久久久| 日本成人一区二区| 欧美高清中文字幕| 91免费版在线| 国产影视一区二区| 欧美国产日韩一区二区| 五月综合久久| 91精品999| 亚洲大片免费看| 国产福利在线看| 亚洲专区国产精品| 亚洲永久视频| 51精品免费网站| 日韩精品在线影院| 91国产一区| 成 年 人 黄 色 大 片大 全| 国产清纯白嫩初高生在线观看91 | 污污视频在线| 女同一区二区| 国产麻豆精品在线| 国产成人无码av| 欧美成人精品三级在线观看 | 国产综合色产在线精品 | 日本韩国一区二区三区视频| 国产精品va在线观看视色| 精品视频一区在线|