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

Android進(jìn)階之徹底理解LruCache緩存機(jī)制原理

移動(dòng)開發(fā) Android
Android的三級(jí)緩存,其中主要的就是內(nèi)存緩存和硬盤緩存。這兩種緩存機(jī)制的實(shí)現(xiàn)都應(yīng)用到了LruCache算法,今天我們就從使用到源碼解析,來徹底理解Android中的緩存機(jī)制。

[[421640]]

前言

Android的三級(jí)緩存,其中主要的就是內(nèi)存緩存和硬盤緩存。這兩種緩存機(jī)制的實(shí)現(xiàn)都應(yīng)用到了LruCache算法,今天我們就從使用到源碼解析,來徹底理解Android中的緩存機(jī)制;

一、LruCache概念介紹

1.什么是LruCache?

LruCache是Android 3.1所提供的一個(gè)緩存類,所以在Android中可以直接使用LruCache實(shí)現(xiàn)內(nèi)存緩存。而DisLruCache目前在Android 還不是Android SDK的一部分,但Android官方文檔推薦使用該算法來實(shí)現(xiàn)硬盤緩存;

LruCache是個(gè)泛型類,主要算法原理是把最近使用的對(duì)象用強(qiáng)引用(即我們平常使用的對(duì)象引用方式)存儲(chǔ)在 LinkedHashMap 中。當(dāng)緩存滿時(shí),把最近最少使用的對(duì)象從內(nèi)存中移除,并提供了get和put方法來完成緩存的獲取和添加操作;

2.LruCache的使用

LruCache的使用非常簡(jiǎn)單,我們就已圖片緩存為例

  1. int maxMemory = (int) (Runtime.getRuntime().totalMemory()/1024); 
  2.         int cacheSize = maxMemory/8; 
  3.         mMemoryCache = new LruCache<String,Bitmap>(cacheSize){ 
  4.             @Override 
  5.             protected int sizeOf(String key, Bitmap value) { 
  6.                 return value.getRowBytes()*value.getHeight()/1024; 
  7.             } 
  8.         }; 

①設(shè)置LruCache緩存的大小,一般為當(dāng)前進(jìn)程可用容量的1/8;

②重寫sizeOf方法,計(jì)算出要緩存的每張圖片的大小;

注意:緩存的總?cè)萘亢兔總€(gè)緩存對(duì)象的大小所用單位要一致;

二、LruCache的實(shí)現(xiàn)原理

LruCache的核心思想很好理解,就是要維護(hù)一個(gè)緩存對(duì)象列表,其中對(duì)象列表的排列方式是按照訪問順序?qū)崿F(xiàn)的,即一直沒訪問的對(duì)象,將放在隊(duì)尾,即將被淘汰。而最近訪問的對(duì)象將放在隊(duì)頭,最后被淘汰;

1、構(gòu)造函數(shù)

  1. public LruCache(int maxSize) { 
  2.         if (maxSize <= 0) { 
  3.             throw new IllegalArgumentException("maxSize <= 0"); 
  4.         } 
  5.         this.maxSize = maxSize; 
  6.         this.map = new LinkedHashMap<K, V>(0, 0.75f, true); 
  7.     } 

創(chuàng)建LruCache對(duì)象時(shí),它內(nèi)部做的工作如下:

  • 記錄下制定的最大容量maxSize;
  • 創(chuàng)建一個(gè)初始容量為0的LinkedHashMap,用來保存對(duì)象;
  • 所以,在創(chuàng)建LruCache對(duì)象時(shí),我們需要指定一個(gè)最大容量值maxSize,它可以是具體數(shù)值,也可以是內(nèi)存空間,與它對(duì)應(yīng)的是sizeOf方法:
  1. protected int sizeOf(K key, V value) { 
  2.       return 1; 
  3.   } 

如果我們想以數(shù)量的方式來控制緩存,可以看到,默認(rèn)的sizeOf方法返回值為1,也就是說每次添加一條數(shù)據(jù),它所占用的空間為1,直到添加的內(nèi)容數(shù)量達(dá)到maxSize,這時(shí)候再添加數(shù)據(jù),系統(tǒng)就會(huì)挑選出使用頻率最低的值,將他們移除;

如果以內(nèi)存空間作為緩存限制,需要重寫size,返回對(duì)象所占用的空間大小:

  1. int maxMemory = (int) (Runtime.getRuntime().maxMemory())/1024;//獲取可用內(nèi)存,轉(zhuǎn)換為單位KB 
  2.       int maxCache = maxMemory/10;//緩存大小為可用內(nèi)存的1/10 
  3.       LruCache mMemoryCache = new LruCache<String,Bitmap>(maxCache){ 
  4.           @Override//重寫sizeOf方法,返回每條數(shù)據(jù)占用的內(nèi)存 
  5.           protected int sizeOf(String key, Bitmap value) { 
  6.               return value.getRowBytes()*value.getHeight() / 1024; 
  7.               //return value.getByteCount() / 1024; 
  8.           } 
  9.       }; 

2、讀取內(nèi)容

讀取內(nèi)容對(duì)應(yīng)的是get方法,源碼如下:

  1. public final V get(K key) { 
  2.         if (key == null) {     //如果keynull,直接拋出異常 
  3.             throw new NullPointerException("key == null"); 
  4.         } 
  5.         V mapValue; 
  6.         synchronized (this) { 
  7.             mapValue = map.get(key);  //讀取key對(duì)應(yīng)的值 
  8.             if (mapValue != null) { 
  9.                 hitCount++; 
  10.                 return mapValue;     //如果獲取到內(nèi)容,返回 
  11.             } 
  12.             missCount++;   //如果未讀到內(nèi)容,missCount計(jì)數(shù)增加,繼續(xù)向下執(zhí)行 
  13.         } 
  14.         /*嘗試創(chuàng)建value,可能會(huì)消耗一定的時(shí)間,當(dāng)創(chuàng)建完成時(shí),map可能已經(jīng)發(fā)生變化 
  15.           如果此時(shí)發(fā)現(xiàn)創(chuàng)建時(shí)使用的key已經(jīng)存在,導(dǎo)致沖突,丟棄掉create創(chuàng)建的值 
  16.          * Attempt to create a value. This may take a long timeand the map 
  17.          * may be different when create() returns. If a conflicting value was 
  18.          * added to the map while create() was working, we leave that value in 
  19.          * the map and release the created value. 
  20.          */ 
  21.       //如果未獲取到value,調(diào)用create方法,嘗試創(chuàng)建對(duì)象 
  22.      //create方法默認(rèn)返回null,可以覆寫該方法,決定獲取不到值時(shí)的添加方法 
  23.         V createdValue = create(key); 
  24.         if (createdValue == null) { 
  25.             return null
  26.         } 
  27.   //以下部分為創(chuàng)建之后對(duì)map的修改動(dòng)作,包括存放對(duì)象,調(diào)整size等。 
  28.         synchronized (this) { 
  29.             createCount++; 
  30.             mapValue = map.put(key, createdValue); 
  31.             if (mapValue != null) { 
  32.                 // There was a conflict so undo that last put 
  33.                 map.put(key, mapValue); 
  34.             } else { 
  35.                 size += safeSizeOf(key, createdValue); 
  36.             } 
  37.         } 
  38.         if (mapValue != null) { 
  39.             entryRemoved(falsekey, createdValue, mapValue); 
  40.             return mapValue; 
  41.         } else { 
  42.             trimToSize(maxSize); 
  43.             return createdValue; 
  44.         } 
  45.     } 

get方法嘗試根據(jù)傳入的key來讀取內(nèi)容,如果讀取不到,可以選擇是否創(chuàng)建一個(gè)對(duì)象,如果選擇創(chuàng)建對(duì)象,需要我們覆寫create方法來返回要?jiǎng)?chuàng)建的對(duì)象,使用也很簡(jiǎn)單;

3、存儲(chǔ)內(nèi)容

存儲(chǔ)內(nèi)容使用的是put方法:

  1. public final V put(K key, V value) { 
  2.         if (key == null || value == null) { 
  3.             throw new NullPointerException("key == null || value == null"); 
  4.         } 
  5.         V previous; 
  6.         synchronized (this) { 
  7.             putCount++; 
  8.             size += safeSizeOf(key, value); 
  9.             previous = map.put(key, value); 
  10.             if (previous != null) { 
  11.                 size -= safeSizeOf(key, previous); 
  12.             } 
  13.         } 
  14.         if (previous != null) { 
  15.             entryRemoved(falsekey, previous, value); 
  16.         } 
  17.         trimToSize(maxSize); 
  18.         return previous; 
  19.     } 

在存放內(nèi)容的時(shí)候,可以看到是怎樣控制緩存size的:存放內(nèi)容之后會(huì)將執(zhí)行size += safeSizeOf(key, value);,safeSizeOf的默認(rèn)實(shí)現(xiàn)就是sizeOf方法。每存放一個(gè)對(duì)象,就會(huì)將size增加對(duì)應(yīng)的值。如果存放的key已經(jīng)存在數(shù)據(jù),那么size不變;

同時(shí)還提供了一個(gè)entryRemoved方法,該方法在數(shù)據(jù)被移除時(shí)(調(diào)用remove移除,新值覆蓋,超出緩存被刪除)調(diào)用,默認(rèn)實(shí)現(xiàn)為空;

在put的最后則是調(diào)用了trimToSize,這是控制緩存大小的方法,每當(dāng)有新的數(shù)據(jù)存入時(shí),該方法都會(huì)被調(diào)用。當(dāng)前size超出緩存最大值之后,會(huì)通過此方法刪除最近最少使用的數(shù)據(jù);

除了正常的存儲(chǔ),讀取之外,LruCache還提供了一個(gè)一次性讀取全部緩存對(duì)象的方法:

  1. public synchronized final Map<K, V> snapshot() { 
  2.         return new LinkedHashMap<K, V>(map); 
  3.     } 

4、trimToSize()方法

  1. public void trimToSize(int maxSize) { 
  2.         //死循環(huán) 
  3.         while (true) { 
  4.             K key
  5.             V value; 
  6.             synchronized (this) { 
  7.                 //如果map為空并且緩存size不等于0或者緩存size小于0,拋出異常 
  8.                 if (size < 0 || (map.isEmpty() && size != 0)) { 
  9.                     throw new IllegalStateException(getClass().getName() 
  10.                             + ".sizeOf() is reporting inconsistent results!"); 
  11.                 } 
  12.                 //如果緩存大小size小于最大緩存,或者map為空,不需要再刪除緩存對(duì)象,跳出循環(huán) 
  13.                 if (size <= maxSize || map.isEmpty()) { 
  14.                     break; 
  15.                 } 
  16.                 //迭代器獲取第一個(gè)對(duì)象,即隊(duì)尾的元素,近期最少訪問的元素 
  17.                 Map.Entry<K, V> toEvict = map.entrySet().iterator().next(); 
  18.                 key = toEvict.getKey(); 
  19.                 value = toEvict.getValue(); 
  20.                 //刪除該對(duì)象,并更新緩存大小 
  21.                 map.remove(key); 
  22.                 size -= safeSizeOf(key, value); 
  23.                 evictionCount++; 
  24.             } 
  25.             entryRemoved(truekey, value, null); 
  26.         } 
  27.     } 

總結(jié)

LruCache中維護(hù)了一個(gè)集合LinkedHashMap,該LinkedHashMap是以訪問順序排序的。當(dāng)調(diào)用put()方法時(shí),就會(huì)在結(jié)合中添加元素,并調(diào)用trimToSize()判斷緩存是否已滿,如果滿了就用LinkedHashMap的迭代器刪除隊(duì)尾元素,即近期最少訪問的元素。當(dāng)調(diào)用get()方法訪問緩存對(duì)象時(shí),就會(huì)調(diào)用LinkedHashMap的get()方法獲得對(duì)應(yīng)集合元素,同時(shí)會(huì)更新該元素到隊(duì)頭;

 

責(zé)任編輯:武曉燕 來源: Android開發(fā)編程
相關(guān)推薦

2021-09-14 07:06:12

Android磁盤緩存

2021-09-01 06:48:16

AndroidGlide緩存

2021-10-15 09:19:17

AndroidSharedPrefe分析源碼

2021-08-15 08:11:54

AndroidSynchronize關(guān)鍵字

2023-11-16 08:22:14

LruCacheAndroid

2021-09-09 06:55:43

AndroidViewDragHel原理

2021-09-10 07:31:54

AndroidAppStartup原理

2018-11-30 09:03:55

HTTP緩存Web

2021-09-08 06:51:52

AndroidRetrofit原理

2021-09-16 06:44:04

Android進(jìn)階流程

2021-05-10 07:08:41

數(shù)據(jù)結(jié)構(gòu)緩存

2021-09-17 06:55:50

AndroidLayoutView

2021-09-30 07:36:51

AndroidViewDraw

2021-09-15 07:31:33

Android窗口管理

2021-09-06 13:12:05

前端JavaScript編程

2021-09-24 08:10:40

Java 語言 Java 基礎(chǔ)

2021-05-13 08:55:33

Android架構(gòu)功能

2022-10-24 08:08:27

閉包編譯器

2024-06-21 08:32:24

2021-09-18 06:56:01

JavaCAS機(jī)制
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

电影一区二区三区| 香港一级纯黄大片| 欧美精品日本| 日韩欧美成人一区| 无罩大乳的熟妇正在播放| 麻豆国产在线播放| 六月丁香婷婷久久| 性色av一区二区三区免费| xxxx日本免费| 秋霞影院一区| 91福利国产成人精品照片| 伊人久久大香线蕉午夜av| 国精产品一品二品国精品69xx| 亚欧美中日韩视频| 欧美激情视频在线观看| 亚洲精品国产一区黑色丝袜| 精品久久久久久久久久岛国gif| 亚洲成人7777| 青青草原国产免费| 黄色大片在线看| 国产成人av一区二区三区在线| 日本一区二区在线播放| 欧美日韩在线视频免费| 国产伦精品一区二区三区视频 | 日日夜夜亚洲精品| 婷婷亚洲久悠悠色悠在线播放| 一区二区三区国| 丝袜视频国产在线播放| 狠狠色丁香久久婷婷综合_中| 57pao成人国产永久免费| 亚洲成人生活片| 日韩aaaa| 一本色道久久综合狠狠躁篇的优点 | 蜜桃av久久久亚洲精品| 精品国产av鲁一鲁一区| 美女脱光内衣内裤视频久久网站 | 在线免费观看羞羞视频一区二区| 99精品一区二区三区无码吞精| 亚洲免费一区| 欧美日韩视频第一区| 成人久久久久久久久| 波多野结衣在线播放| 亚洲日本护士毛茸茸| 日本一区二区三区视频在线播放| 日韩中文字幕免费观看| 国产成人在线视频网站| 91久久精品国产| 91麻豆国产视频| 免费在线观看视频一区| 国产精品久久99久久| 人妻 日韩精品 中文字幕| 日韩视频二区| 韩国福利视频一区| 日韩三级视频在线| 日韩午夜免费视频| 97在线看福利| 中文字幕视频网站| 久久婷婷亚洲| 5278欧美一区二区三区| 国产一级免费视频| 丝袜美腿亚洲综合| 国产精品美乳在线观看| 一本色道久久综合亚洲| 久久97超碰色| 成人免费网视频| www日本高清视频| 成人av免费在线播放| 国产日韩精品久久| 偷拍自拍在线视频| 国产亚洲综合av| 亚洲欧美日韩精品在线| 免费观看在线午夜影视| 亚洲激情第一区| 国产高清www| 伊伊综合在线| 欧美日韩国产成人在线91| 日韩在线一区视频| 网站一区二区| 日韩精品视频在线观看网址| 亚洲久久久久久久| 93在线视频精品免费观看| 久久av中文字幕| 日本在线观看视频网站| 蜜桃久久av| 91美女片黄在线观看游戏| 亚洲第一成年人网站| 2014亚洲片线观看视频免费| 日韩精品成人一区二区在线观看| 成年在线观看免费人视频| 亚洲欧美在线另类| 国产毛片视频网站| 高清成人在线| 欧美mv日韩mv| 国产精品无码无卡无需播放器| 在线观看国产精品入口| 91成人免费观看网站| 亚洲视频久久久| www.性欧美| 这里只有精品66| 免费在线小视频| 正在播放亚洲一区| 国产熟妇搡bbbb搡bbbb| 亚洲天堂免费| 日本欧美国产在线| 99久久久久成人国产免费 | 亚洲天堂精品一区| 亚洲黄色三级| 国产综合色香蕉精品| 天天操天天操天天操| 国产精品久久久久婷婷二区次| 青青草视频国产| 亚洲电影有码| 亚洲国产成人爱av在线播放| 殴美一级黄色片| 亚洲免费中文| 国产精品10p综合二区| 91在线导航| 欧美午夜激情在线| 亚洲av午夜精品一区二区三区| 欧美少妇性xxxx| 国产69精品久久久久9| 国产又粗又大又爽视频| 国产亚洲一二三区| a在线视频观看| 中文字幕一区二区三区中文字幕| 中文字幕久久亚洲| 精品国产xxx| 99免费精品视频| 日本免费成人网| 免费一区二区三区四区| 亚洲三级 欧美三级| 亚洲一区欧美在线| 懂色中文一区二区在线播放| 最新欧美日韩亚洲| 久久人人视频| 在线观看久久av| 九九热最新视频| 久久久精品免费网站| 欧美日韩成人免费视频| 久久电影在线| 91精品国产一区| 深夜福利视频网站| 亚洲国产精品一区二区尤物区| 亚洲免费999| 999国产精品| 成人精品一区二区三区电影黑人 | 欧美另类在线观看| 国产人妖一区二区三区| 国产精品护士白丝一区av| 亚洲国产高清av| 日韩一区三区| 91丨九色丨国产在线| 日本高清在线观看wwwww色| 欧美三区在线观看| 日本二区三区视频| 国产自产视频一区二区三区| 影音先锋欧美在线| 国产成年精品| 欧美成人免费一级人片100| 国产chinasex对白videos麻豆| 亚洲色欲色欲www在线观看| 特级黄色片视频| 欧美激情第10页| 国产日韩二区| 日本欧美不卡| www.国产一区| 亚洲国产999| 激情久久av一区av二区av三区| 亚洲专区区免费| 奇米影视在线99精品| 亚洲精品白虎| 一区二区三区高清在线观看| 久久久久女教师免费一区| 三级视频在线看| 欧美在线观看视频一区二区| 老司机深夜福利网站| 国产一区999| 日韩av在线第一页| 成人无号精品一区二区三区| 成人中文字幕在线观看| 91福利在线免费| 一区二区成人精品| 99在线精品视频免费观看软件| 亚洲国产精品嫩草影院| www在线观看免费视频| 精品一区二区三区久久| 99色这里只有精品| 国产成人精品免费视| 91久久久精品| 在线天堂新版最新版在线8| 伊人精品在线观看| 精品人妻一区二区三区换脸明星| 五月激情综合婷婷| 一本色道久久88| 波多野结衣中文字幕一区 | 国产99久久久精品| 少妇高清精品毛片在线视频| 91久久夜色精品国产按摩| 国产精品一区二区免费看| av在线一区不卡| 久久久久久久久久久免费| 国产私人尤物无码不卡| 欧美成人伊人久久综合网| 国产一区二区视频网站| 亚洲曰韩产成在线| 美国黑人一级大黄| 99国产精品国产精品久久| 国产成年人视频网站| 成人性生生活性生交12| 国产精品久久久久精| 亚洲午夜精品一区二区三区他趣| 日韩网站在线播放| 国产激情91久久精品导航| 粉嫩虎白女毛片人体| 影音先锋亚洲一区| 自拍亚洲欧美老师丝袜| 精品久久91| 久久精品日产第一区二区三区 | 天天色综合天天| 国产传媒免费在线观看| 久久久噜噜噜久噜久久综合| 香蕉视频免费网站| 国产在线麻豆精品观看| 亚洲无吗一区二区三区| 亚洲一区二区毛片| 黄色激情在线视频| 国产精品videosex极品| 国产又大又长又粗又黄| 欧美色爱综合| 欧美一区二区视频在线| 亚洲女娇小黑人粗硬| 国产传媒欧美日韩| 日韩在线观看一区二区三区| 国产精品自拍网| 国产一区二区主播在线| 国产成人啪精品视频免费网| 精精国产xxx在线视频app| 欧美激情成人在线视频| 三级资源在线| 高清亚洲成在人网站天堂| 久草成色在线| 久久久亚洲影院| 成人bbav| 97av在线视频免费播放| 不卡一本毛片| 久久久亚洲网站| 亚洲优女在线| 国产成人av在线| 欧美特大特白屁股xxxx| 国产精品96久久久久久| 香蕉成人av| 国产精品嫩草影院久久久| a∨色狠狠一区二区三区| 国产精品免费视频久久久| jizz亚洲女人高潮大叫| 国产一区二区色| 久久免费精品| 电影午夜精品一区二区三区| 国产精品黄网站| 麻豆成人av| 色无极亚洲影院| 麻豆md0077饥渴少妇| 欧美视频网站| 久久免费视频3| 免费观看在线色综合| 午夜天堂在线视频| 成人免费av在线| 国产激情在线免费观看| 中文字幕精品综合| wwwav国产| 大荫蒂欧美视频另类xxxx| 午夜婷婷在线观看| 欧美日韩aaa| 黄频在线免费观看| 亚洲欧洲美洲在线综合| www 日韩| 欧美激情精品久久久久久蜜臀| 国产剧情av在线播放| 国产精品黄色影片导航在线观看| 亚洲免费资源| 欧美不卡三区| 亚洲欧美偷拍自拍| 国产l精品国产亚洲区久久| 日本不卡一二三区黄网| 三大队在线观看| 久久精品这里都是精品| 久久精品日韩无码| 欧美日韩国产激情| 亚洲在线免费观看视频| 欧美精品一区二区三区蜜桃| 精品视频一二三| 色综合久久中文字幕综合网小说| 国产夫妻在线播放| 日本一区二区不卡| h视频久久久| 亚洲精品视频一区二区三区| 精品成人一区| 国产传媒免费观看| 久久香蕉国产线看观看99| 天天操夜夜操av| 色狠狠一区二区| 丰满熟女一区二区三区| 最新的欧美黄色| 亚洲天堂手机| 成人区精品一区二区| 日韩伦理一区| 日韩免费毛片视频| 粉嫩嫩av羞羞动漫久久久 | 亚洲天堂av网站| 成人欧美一区二区三区在线播放| 久久久久久久久久久久久久av| 678五月天丁香亚洲综合网| 欧美女子与性| 欧美激情视频一区二区| 伊人亚洲精品| 三级三级久久三级久久18| 在线综合欧美| www.17c.com喷水少妇| 亚洲欧美影音先锋| 中文永久免费观看| 日韩精品在线免费| 91超碰在线播放| av日韩免费电影| 一精品久久久| 中文字幕12页| 国产精品美女久久久久aⅴ国产馆| 亚洲天堂av片| 日韩黄色在线免费观看| 成人在线免费观看黄色| 亚洲xxxxx性| 亚洲精品成人| 免费黄频在线观看| 成人欧美一区二区三区1314| 中文字幕理论片| 国产亚洲精品91在线| 涩涩涩在线视频| 久久99国产精品99久久| 亚洲高清不卡| 国产成人av无码精品| 亚洲mv在线观看| 天天舔天天干天天操| 欧美高清在线播放| 一区二区三区在线资源| 欧美 亚洲 视频| 国产精品99久久久久久久vr | 欧美夫妇交换xxx| 午夜亚洲福利老司机| 日本高清视频免费看| 国内精品视频久久| 日韩成人动漫在线观看| 国内外成人激情视频| 91麻豆精品一区二区三区| 国产一级片毛片| 国产一区二区三区丝袜| 成人国产在线| 日本一区二区免费高清视频| 国产一区二区剧情av在线| 国产极品国产极品| 亚洲精品一区二区三区蜜桃下载| 国产白丝在线观看| 久久国产精品99久久久久久丝袜| 国产一级一区二区| 偷拍夫妻性生活| 欧美精品在线视频| 青青草原av在线| 久久久久久久久一区| 日韩电影在线一区二区三区| 亚洲女人毛茸茸高潮| 日韩一级片在线观看| freexxx性亚洲精品| 开心色怡人综合网站| 蜜臀91精品一区二区三区| 日韩欧美综合视频| 精品国产凹凸成av人网站| 无遮挡在线观看| 中文字幕一区二区三区四区五区六区 | 国产亚洲一卡2卡3卡4卡新区 | 成人激情视屏| 亚洲啊啊啊啊啊| 97精品电影院| 亚洲一区中文字幕在线| 韩剧1988免费观看全集| sdde在线播放一区二区| 免费看三级黄色片| 欧美性videos高清精品| 欧洲美女少妇精品| 国产综合 伊人色| 久久精品国产亚洲aⅴ| 国语对白一区二区| 中文字幕亚洲欧美| 久久精品色综合| 天堂av手机在线| 欧美性色xo影院| av官网在线播放| 午夜久久资源| 成人av午夜影院| 91影院在线播放| 欧美最近摘花xxxx摘花| 欧美88av| 人妻无码一区二区三区免费|