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

Android之ListView原理學習與優化總結

移動開發 Android
利用ViewHolder來優化ListView數據加載,僅僅就此一條嗎?其實不是的,首先,想要優化ListView就得先了解ListView加載數據原理,這是前提,但是小馬在這個地方先做一些簡單的補充,大家一定仔細看下,保證會有收獲的。

在整理前幾篇文章的時候有朋友提出寫一下ListView的性能優化方面的東西,這個問題也是小馬在面試過程中被別人問到的…..今天小馬就借此機會來整理下,網上類似的資料蠻多的,倒不如自己寫一篇,記錄在這個地方,供自己以后使用,不用再翻來翻去的找了,用自己寫的…呵呵,不多講其它了,說起優化我想大家第一反應跟小馬一樣吧?想到利用ViewHolder來優化ListView數據加載,僅僅就此一條嗎?其實不是的,首先,想要優化ListView就得先了解ListView加載數據原理,這是前提,但是小馬在這個地方先做一些簡單的補充,大家一定仔細看下,保證會有收獲的:

列表的顯示需要三個元素:

  1. ListVeiw:  用來展示列表的View。

  2. 適配器 : 用來把數據映射到ListView上

  3. 數據:    具體的將被映射的字符串,圖片,或者基本組件。 

根據列表的適配器類型,列表分為三種,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter,這三種適配器的使用大家可學習下官網上面的使用或者自行百度谷歌,一堆DEMO!!!其中以ArrayAdapter最為簡單,只能展示一行字。SimpleAdapter有最好的擴充性,可以自定義出各種效果。SimpleCursorAdapter可以認為是SimpleAdapter對數據庫的簡單結合,可以方便的把數據庫的內容以列表的形式展示出來。

系統要繪制ListView了,他首先用getCount()函數得到要繪制的這個列表的長度,然后開始繪制第一行,怎么繪制呢?調用getView()函數。在這個函數里面首先獲得一個View(這個看實際情況,如果是一個簡單的顯示則是View,如果是一個自定義的里面包含很多控件的時候它其實是一個ViewGroup),然后再實例化并設置各個組件及其數據內容并顯示它。好了,繪制完這一行了。那 再繪制下一行,直到繪完為止,前面這些東西做下鋪墊,繼續…….

 現在我們再來了解ListView加載數據的原理,有了這方面的了解后再說優化才行,下面先跟大家一起來看下ListView加載數據的基本原理小馬就直接寫了:

ListView的工作原理如下:

ListView 針對每個item,要求 adapter “返回一個視圖” (getView),也就是說ListView在開始繪制的時候,系統首先調用getCount()函數,根據他的返回值得到ListView的長度,然后根據這個長度,調用getView()一行一行的繪制ListView的每一項。如果你的getCount()返回值是0的話,列表一行都不會顯示,如果返回1,就只顯示一行。返回幾則顯示幾行。如果我們有幾千幾萬甚至更多的item要顯示怎么辦?為每個Item創建一個新的View?不可能!!!實際上Android早已經緩存了這些視圖,大家可以看下下面這個截圖來理解下,這個圖是解釋ListView工作原理的最經典的圖了大家可以收藏下,不懂的時候拿來看看,加深理解,其實Android中有個叫做Recycler的構件,順帶列舉下與Recycler相關的已經由Google做過N多優化過的東東比如:AbsListView.RecyclerListener、ViewDebug.RecyclerTraceType等等,要了解的朋友自己查下,不難理解,下圖是ListView加載數據的工作原理(原理圖看不清楚的點擊后看大圖):

下面簡單說下上圖的原理:

  1. 如果你有幾千幾萬甚至更多的選項(item)時,其中只有可見的項目存在內存(內存內存哦,說的優化就是說在內存中的優化!!!)中,其他的在Recycler中
  2. ListView先請求一個type1視圖(getView)然后請求其他可見的項目。convertView在getView中是空(null)的
  3. 當item1滾出屏幕,并且一個新的項目從屏幕低端上來時,ListView再請求一個type1視圖。convertView此時不是空值了,它的值是item1。你只需設定新的數據然后返回convertView,不必重新創建一個視圖
  4. 下面來看下小馬從網上找來的示例代碼,網址搞丟了,只有一個word文檔,只能 copy過來,不然直接貼網址,結合上面的原理圖一起加深理解,如下:
  1. public class MultipleItemsList extends ListActivity {    
  2.  private MyCustomAdapter mAdapter;     
  3. @Override     
  4. public void onCreate(Bundle savedInstanceState) {         
  5. super.onCreate(savedInstanceState);        
  6.  mAdapter = new MyCustomAdapter();         
  7. for (int i = 0; i < 50; i++) {            
  8.  mAdapter.addItem("item " + i);         
  9. }         
  10. setListAdapter(mAdapter);     
  11. }     
  12. private class MyCustomAdapter extends BaseAdapter {        
  13. private ArrayList mData = new ArrayList();        
  14.  private LayoutInflater mInflater;          
  15. public MyCustomAdapter() {             
  16. mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);        
  17.  }        
  18. public void addItem(final String item) {             
  19. mData.add(item);            
  20. notifyDataSetChanged();        
  21.  }         
  22.  
  23. @Override        
  24. public int getCount() {             
  25. return mData.size();        
  26.  }        
  27.  @Override        
  28.  public String getItem(int position) {            
  29.  return mData.get(position);         
  30. }          
  31. @Override       
  32.  public long getItemId(int position) {           
  33.  return position;        
  34. }          
  35. @Override        
  36. public View getView(int position, View convertView, ViewGroup parent) {            
  37.  System.out.println("getView " + position + " " + convertView);            
  38. ViewHolder holder = null;             
  39. if (convertView == null) {                 
  40. convertView = mInflater.inflate(R.layout.item1, null);                 
  41. holder = new ViewHolder();                
  42. holder.textView = (TextView)convertView.findViewById(R.id.text);                
  43.  convertView.setTag(holder);             
  44. } else {                
  45.  holder = (ViewHolder)convertView.getTag();         
  46.    }            
  47.  holder.textView.setText(mData.get(position));            
  48.  return convertView;       
  49.  }    }    
  50.  public static class ViewHolder {        
  51.  public TextView textView;    
  52.  } }  

執行程序,查看日志:

getView 被調用 9 次 ,convertView 對于所有的可見項目是空值(如下):

 

然后稍微向下滾動List,直到item10出現:

       convertView仍然是空值,因為recycler中沒有視圖(item1的邊緣仍然可見,在頂端)再滾動列表,繼續滾動:

 

      convertView不是空值了!item1離開屏幕到Recycler中去了,然后item11被創建,再滾動下:

 

此時的convertView非空了,在item11離開屏幕之后,它的視圖(…0f8)作為convertView容納item12了,好啦,結合以上原理,下面來看看今天最主要的話題,主角ListView的優化:

             首先,這個地方先記兩個ListView優化的一個小點:

                       1. ExpandableListView 與 ListActivity 由官方提供的,里面要使用到的ListView是已經經過優化的ListView,如果大家的需求可以用Google自帶的ListView滿足的的話盡量用官方的,絕對沒錯!

                       2.其次,像小馬前面講的,說ListView優化,其實并不是指其它的優化,就是內存是的優化,提到內存…(想到OOM,折騰了我不少時間),很多很多,先來寫下,如果我們的ListView中的選項僅僅是一些簡單的TextView的話,就好辦啦,消耗不了多少的,但如果你的Item是自定義的Item的話,例如你的自定義Item布局ViewGroup中包含:按鈕、圖片、flash、CheckBox、RadioButton等一系列你能想到的控件的話, 你要在getView中單單使用文章開頭提到的ViewHolder是遠遠不夠的,如果數據過多,加載的圖片過多過大,你BitmapFactory.decode的猛多的話,OOM搞死你,這個地方再警告下大家,是警告……….也提醒下自己:

                         小馬碰到的問題大家應該也都碰到過的,自定義的ListView項亂序問題,我很天真的在getView()中強制清除了下ListView的緩存數據convertView,也就是convertView = null了,雖然當時是解決了這個問題讓其它每次重繪,但是犯了大錯了,如果數據太多的話,出現最最惡心的錯,手機卡死或強制關機,關機啊哥哥們……O_O,客戶殺了我都有可能,但大家以后別犯這樣的錯了,單單使用清除緩存convertView是解決不了實際問題的,繼續……

下面是小記:圖片用完了正確的釋放… 

  1. if(!bmp.isRecycle() ){        
  2. bmp.recycle()   //回收圖片所占的內存 
  3.  system.gc()  //提醒系統及時回收 
  4. }  

下面來列舉下真正意義上的優化吧:

  1.  ViewHolder   Tag 必不可少,這個不多說!
  2. 如果自定義Item中有涉及到圖片等等的,一定要狠狠的處理圖片,圖片占的內存是ListView項中最惡心的,處理圖片的方法大致有以下幾種:
    2.1:不要直接拿個路徑就去循環decodeFile();這是找死….用Option保存圖片大小、不要加載圖片到內存去;
    2.2:  拿到的圖片一定要經過邊界壓縮
    2.3:在ListView中取圖片時也不要直接拿個路徑去取圖片,而是以WeakReference(使用WeakReference代替強引用。比如可以使        用WeakReference mContextRef)、SoftReference、WeakHashMap等的來存儲圖片信息,是圖片信息不是圖片哦!
    2.4:在getView中做圖片轉換時,產生的中間變量一定及時釋放,用以下形式:
  3. 盡量避免在BaseAdapter中使用static 來定義全局靜態變量,我以為這個沒影響 ,這個影響很大,static是Java中的一個關鍵字,當用它來修飾成員變量時,那么該變量就屬于該類,而不是該類的實例。所以用static修飾的變量,它的生命周期是很長的,如果用它來引用一些資源耗費過多的實例(比如Context的情況最多),這時就要盡量避免使用了..
  4. 如果為了滿足需求下必須使用Context的話:Context盡量使用Application Context,因為Application的Context的生命周期比較長,引用它不會出現內存泄露的問題
  5. 盡量避免在ListView適配器中使用線程,因為線程產生內存泄露的主要原因在于線程生命周期的不可控制
  6.  記下小馬自己的錯誤:
  7. 之前使用的自定義ListView中適配數據時使用AsyncTask自行開啟線程的,這個比用Thread更危險,因為Thread只有在run函數不 結束時才出現這種內存泄露問題,然而AsyncTask內部的實現機制是運用了線程執行池(ThreadPoolExcutor,要想了解這個類的話大家加下我們的Android開發群五號,因為其它群的存儲空間快滿了,所以只上傳到五群里了,看下小馬上傳的Gallery源碼,你會對線程執行池、軟、弱、強引用有個更深入的認識),這個類產生的Thread對象的生命周期是不確定的,是應用程序無法控制的,因此如果AsyncTask作為Activity的內部類,就更容易出現內存泄露的問題。這個問題的解決辦法小馬當時網上查到了記在txt里了,如下: 
    6.1:將線程的內部類,改為靜態內部類。
    6.2:在線程內部采用弱引用保存Context引用
    示例代碼如下:
     
    1. public abstract class WeakAsyncTask extends  AsyncTask {        
    2.  protected WeakReference mTarget;            
    3. public WeakAsyncTask(WeakTarget target) {             
    4. mTarget = new WeakReference(target);         
    5. }                  
    6. @Override        
    7. protected final void onPreExecute() {            
    8. final WeakTarget target = mTarget.get();             
    9. if (target != null) {                 
    10. this.onPreExecute(target);             
    11. }        
    12.  
    13. }                   
    14.  @Override         
    15. protected final Result doInBackground(Params... params) {             
    16. final WeakTarget target = mTarget.get();            
    17. if (target != null) {                 
    18. return this.doInBackground(target, params);             
    19. } else {                
    20. return null;             
    21. }         
    22. }                    
    23. @Override        
    24. protected final void onPostExecute(Result result) {            
    25.  final WeakTarget target = mTarget.get();             
    26. if (target != null) {                 
    27. this.onPostExecute(target, result);           
    28. }        
    29. }         
    30.  protected void onPreExecute(WeakTarget target) {            
    31. // No default action         }           
    32.  protected abstract Result doInBackground(WeakTarget target, Params... params);           
    33. protected void onPostExecute(WeakTarget target, Result result) {           
    34.  // No default action         }     }  

好啦,ListVIew的優化問題,小馬就暫時先理解記錄這么多了,如果朋友們有什么更好的優化建議什么的,留言指點下小馬,一定會及時添加到進來的,先謝謝啦,其實在ListView適配器的getView()方法中可以做很多的優化,我記得還有可以優化findViewById()這個方法來尋址資源信息效率的方法,資料太多了,小馬發現了會及時更新的哦,天太晚了,先休息了,吼吼,大家加油,一起努力學習!!!O_O

責任編輯:張葉青 來源: 技術博客
相關推薦

2019-09-23 08:27:15

TCP長連接心跳

2017-12-07 15:34:57

數據庫MySQL優化原理

2015-07-03 11:12:17

產品經理技術設計篇

2013-03-27 09:17:17

Android開發AndroidList

2014-12-17 09:46:30

AndroidListView最佳實踐

2024-12-24 10:50:05

GinWeb開發

2021-07-30 19:44:51

AndroidJava線程

2009-08-31 18:34:57

C#接口事件

2011-08-25 10:07:24

Lua 5.0函數編譯器

2011-05-31 17:08:41

Android 網絡連接

2013-04-11 10:40:04

Android優化總結Android網絡編程Android常見功能

2014-07-29 15:57:01

ContentProv

2021-07-29 14:20:34

網絡優化移動互聯網數據存儲

2024-03-22 15:32:21

機器學習算法

2015-09-15 08:30:23

Android代碼優化

2011-05-27 15:02:15

Android ListView

2019-12-13 10:25:08

Android性能優化啟動優化

2019-09-02 09:21:16

Zookeeper架構師集群

2013-02-20 14:32:37

Android開發性能

2010-02-07 15:12:24

學習Android
點贊
收藏

51CTO技術棧公眾號

毛片免费看不卡网站| 国产成人麻豆精品午夜在线| 精品国产午夜肉伦伦影院| 午夜免费久久看| 九九九九精品九九九九| 伊人久久久久久久久久久久| 色综合咪咪久久网| 日韩免费视频一区二区| 日本中文字幕网址| 高清日韩av电影| 国产在线不卡一区| 国内精品视频一区| 波多野结衣 在线| 欧美电影在线观看网站| 亚洲国产综合人成综合网站| 品久久久久久久久久96高清| 中文字幕乱码无码人妻系列蜜桃| 51精产品一区一区三区| 亚洲国产成人精品一区二区| 无码人妻精品一区二区三区66| 免费在线看黄网站| 99这里只有久久精品视频| 国产精品福利小视频| 破处女黄色一级片| 国产一区二区三区天码| 欧美一区二区三区四区在线观看 | 92看片淫黄大片一级| 超碰在线影院| 99久久伊人网影院| 91免费精品视频| 欧美日韩精品一区二区三区视频播放 | 久久99精品久久久久久琪琪| 国产在线观看无码免费视频| 亚洲一区二区av| 欧美性猛交xxxxx水多| 四虎影院一区二区三区| 人妻妺妺窝人体色www聚色窝 | 91亚洲国产高清| 精品少妇一区二区三区免费观看| 91香蕉视频导航| 国产伦子伦对白在线播放观看| 中文一区二区在线观看| 精品久久精品久久| 国产成人精品白浆久久69| 蜜臀av一区二区在线观看| 午夜精品久久久久久久久久久久| 久久国产波多野结衣| 蜜乳av综合| 亚洲成人av在线| 搡的我好爽在线观看免费视频| 亚洲电影有码| 色偷偷久久人人79超碰人人澡| 精品视频在线观看一区| 日韩欧美一起| 亚洲视频一区二区在线| 天堂av一区二区| 三级国产在线观看| 91偷拍与自偷拍精品| av色综合网| 国产精品视频在线观看免费 | 国产精品国产自产拍高清av王其| 欧美黑人xxxxx| 午夜视频1000| av亚洲精华国产精华| 国产精品区一区| 国产伦子伦对白视频| 美女网站一区二区| 国产精品色婷婷视频| 日韩不卡高清视频| 日韩1区2区日韩1区2区| 国产精品久久久久免费a∨大胸| 天天干天天操天天爱| 香蕉久久夜色精品国产| 隔壁老王国产在线精品| 一级片一级片一级片| 999国产精品999久久久久久| 色天天综合狠狠色| 99热99这里只有精品| 99久久精品网站| 国产无套在线观看| 日本xxxxxwwwww| 国产成人av一区二区| 亚洲www在线观看| 99久久一区二区| 国产精品66部| 亚洲自拍高清视频网站| 亚洲国产一二三区| 成人成人成人在线视频| 黑人中文字幕一区二区三区| 丝袜视频国产在线播放| 久久免费的精品国产v∧| 日本在线一区| 日本中文字幕在线看| 国产精品免费aⅴ片在线观看| 亚洲欧美日韩精品在线| 成年人黄视频在线观看| 亚洲成人av中文| 美女福利视频在线| 午夜av成人| 日韩一区二区三区免费观看| 亚洲午夜久久久久久久久| 亚洲欧美tv| 精品国产一区二区在线 | 一区二区三区在线免费观看视频| 性欧美xxxx大乳国产app| 国产97在线播放| 97超碰中文字幕| 成人美女在线视频| 久久久久久久有限公司| 日本a级在线| 亚洲国产美女搞黄色| 日本va中文字幕| 蜜桃精品视频| 亚洲欧洲日产国产网站| 乱老熟女一区二区三区| 国产情侣一区| 成人欧美一区二区三区黑人孕妇| 午夜视频免费在线| 日本一区二区免费在线观看视频| 日韩亚洲欧美一区二区| 91看片一区| 亚洲大胆人体av| 污污视频网站在线免费观看| 国产精品久久777777毛茸茸| 成人亚洲欧美一区二区三区| 日韩电影免费| 亚洲精品乱码久久久久久黑人| 日韩欧美精品在线观看视频| 精品一区二区三区在线观看视频| 亚洲精品天天看| 免费一级片在线观看| 青青草97国产精品免费观看| 国产在线观看一区| dj大片免费在线观看| 在线观看网站黄不卡| 久久久高清视频| 中文字幕日韩欧美精品高清在线| 国产精品久久久久久久久| 亚洲色图另类小说| 一区二区三区中文免费| 美女在线视频一区二区| 综合国产视频| 97av在线视频免费播放| 999av视频| 中文字幕亚洲一区二区av在线| 黄色片视频在线免费观看| 538任你躁精品视频网免费| 日韩在线www| av首页在线观看| 久久久久久一级片| 日韩成人三级视频| 免费观看在线一区二区三区| 中文字幕一区二区精品| 无码一区二区三区在线观看| 91视视频在线直接观看在线看网页在线看| 中文字幕の友人北条麻妃| 国产一区二区三区朝在线观看| 日韩福利视频在线观看| 一级免费在线观看| www.亚洲人| 99久久国产综合精品五月天喷水| 国产精品久久久久久久久久白浆| 欧美国产日韩一区| av中文字幕免费| 一区二区久久久| 色哟哟网站在线观看| 欧美在线网址| 亚洲一区制服诱惑| 91极品在线| 欧美日韩国产一区| 天天看天天摸天天操| 黑人精品欧美一区二区蜜桃| 精品少妇人妻av一区二区| 精品视频91| 久久久久久九九九| 亚洲爆乳无码一区二区三区| 亚洲国产日日夜夜| 青青草视频网站| 久久都是精品| 亚洲一区二区三区精品动漫| 国产 日韩 欧美| 久久av.com| 欧美熟女一区二区| 色综合欧美在线| 精品熟妇无码av免费久久| 久久99精品一区二区三区| 国产美女视频免费| 99久久香蕉| 69av在线视频| av在线免费观看网| 91精品蜜臀在线一区尤物| 国产1区2区3区4区| 成人午夜免费av| 久久久久久www| 欧美精品momsxxx| 成人激情春色网| 黄色在线看片| 在线色欧美三级视频| 国产影视一区二区| 午夜精品一区二区三区三上悠亚| jizz日本免费| 麻豆国产精品官网| 男人天堂手机在线视频| 精品国产一级毛片| 99久久99久久| 亚洲mmav| 欧美激情小视频| 成人在线观看免费| 日韩精品一区二区三区中文精品 | 免费在线黄色影片| 欧美人牲a欧美精品| 欧美福利视频一区二区| 中文字幕精品一区| 亚洲乱妇老熟女爽到高潮的片| 亚洲欧美日韩专区| 国产人妻人伦精品| 欧美在线色图| 精品久久久久亚洲| av一级亚洲| 91成人免费视频| 精品久久毛片| 国产精品美女呻吟| 在线观看欧美日韩电影| 欧美日韩国产va另类| 国产成人天天5g影院在线观看| 日韩精品中午字幕| 中文字幕有码视频| 大桥未久av一区二区三区| 杨钰莹一级淫片aaaaaa播放| 国产丝袜在线精品| 曰本三级日本三级日本三级| 男女男精品网站| 自慰无码一区二区三区| 亚洲欧洲美洲一区二区三区| 日本一区高清不卡| 久久99精品久久久久久欧洲站| 91久久国产综合久久91精品网站| 成年男女免费视频网站不卡| 久久久国产一区| 岛国在线大片| 国产亚洲视频在线| 五月天婷婷视频| 精品国产免费人成电影在线观看四季| 中文在线资源天堂| 在线中文字幕一区| 欧产日产国产69| 欧美日韩激情网| 日韩久久久久久久久| 一区二区三区欧美久久| 97在线观看视频免费| 中文字幕电影一区| 黄色片在线观看免费| 国产三级欧美三级| 色婷婷在线影院| 成人av午夜电影| 国产乱国产乱老熟300部视频| 国产一区二区剧情av在线| 91亚洲免费视频| 久久精品午夜| 已婚少妇美妙人妻系列| 久久午夜影视| 免费激情视频在线观看| 日韩精品视频网站| 一区二区三区免费播放| 免费高清视频精品| 日本美女视频一区| 国产激情91久久精品导航| 伊人久久久久久久久| 激情综合网av| 日本黄色www| 国产成人午夜99999| 日本精品一二三| 99热精品国产| 四虎国产精品成人免费入口| 91污在线观看| 美国黑人一级大黄| 自拍偷拍欧美一区| 日韩成人在线视频| 精品久久久无码中文字幕| 日韩欧美一区二区视频| 亚洲免费一级片| 日韩av网站导航| 国产午夜在线视频| 日韩中文字幕亚洲| 91网在线看| 国产91精品不卡视频| 亚洲人免费短视频| 成人精品视频久久久久| 亚洲精品影片| 麻豆一区区三区四区产品精品蜜桃| 国产精品一在线观看| 亚洲三区在线| 欧美不卡高清| 农民人伦一区二区三区| 亚洲一区激情| 亚洲天堂av一区二区| 粉嫩aⅴ一区二区三区四区| 中文字幕在线免费看线人| 国产精品妹子av| 999精品在线视频| 国产酒店精品激情| 风间由美一二三区av片| 国产精品成人在线观看| 女人十八岁毛片| 日韩欧美在线综合网| 国产福利在线视频| 午夜免费日韩视频| 精品三级国产| 亚洲精品在线免费| 久久狠狠一本精品综合网| zjzjzjzjzj亚洲女人| 国产精品理论在线观看| 欧美亚洲精品天堂| 精品国产一区二区精华| 免费大片在线观看www| 国产成人精品综合久久久| 国内露脸中年夫妇交换精品| 黄色网络在线观看| 美女任你摸久久 | 2023国产精品| 国产污视频在线观看| 日韩一区二区免费电影| 巨大荫蒂视频欧美另类大| 国产精品男人的天堂| 久久91成人| aaaaaa亚洲| 久久综合丝袜日本网| 国产一级18片视频| 亚洲国产精品专区久久| 色屁屁www国产馆在线观看| 91在线视频免费| 91视频精品| 亚洲天堂国产视频| 国产精品久久久爽爽爽麻豆色哟哟| 黄色av一级片| 亚洲欧美综合另类中字| 欧美日韩美女| 欧美中日韩免费视频| 久久精品盗摄| 中文字幕国产专区| 日韩欧美精品免费在线| 欧美91精品久久久久国产性生爱| 91精品国产色综合久久不卡98| 欧美理伦片在线播放| 黄色国产一级视频| 91网站最新网址| 99re国产在线| 在线亚洲国产精品网| 亚洲在线资源| 亚洲精品偷拍视频| 成人中文字幕合集| 日本一区二区网站| 日韩精品久久久久| 深夜成人福利| 亚洲精品第一区二区三区| 免费精品视频在线| 亚洲波多野结衣| 精品国产免费一区二区三区香蕉| 2020国产在线| 免费99视频| 人禽交欧美网站| 日韩精品一区二区亚洲av性色| 日韩一区二区三区四区| 成人三级小说| 欧美精品一区二区视频| 青青草国产成人av片免费| 中文字幕在线2021| 亚洲爱爱爱爱爱| 怡红院成人在线| 熟女熟妇伦久久影院毛片一区二区| 国产成人综合网| 九九精品免费视频| 中文字幕日本欧美| 91蝌蚪精品视频| 日本免费一级视频| 国产精品国产三级国产aⅴ原创 | 国产激情一区二区三区| 亚洲第一在线播放| 久久激情五月丁香伊人| 国产精品丝袜在线播放| 北条麻妃av高潮尖叫在线观看| 国产精品国产三级国产有无不卡| 精品国产无码一区二区| 欧美一级免费看| 1024精品久久久久久久久| 午夜一区二区三区免费| 91.成人天堂一区| 亚洲最新无码中文字幕久久| 在线不卡日本| 91丨九色porny丨蝌蚪| 国产精品高潮呻吟久久久| 97超碰国产精品女人人人爽 | 国产一区二区三区亚洲| 亚州精品一二三区| 亚洲成人自拍偷拍| 免费**毛片在线| 久久精品成人一区二区三区蜜臀| 精品一区二区免费看| 日韩欧美国产亚洲| 久久综合国产精品台湾中文娱乐网|