日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Volley完全解析4:带你从源码的角度理解Volley

發布時間:2025/4/16 Android 84 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Volley完全解析4:带你从源码的角度理解Volley 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接:http://blog.csdn.net/guolin_blog/article/details/17656437,CSDN 郭霖

經過前三篇文章的學習,Volley的用法我們已經掌握的差不多了,但是對于Volley的工作原理,恐怕有很多朋友還不是很清楚。因此,本篇文章中我們就來一起閱讀一下Volley的源碼,將它的工作流程整體地梳理一遍。同時,這也是Volley系列的最后一篇文章了。

其實,Volley的官方文檔中本身就附有了一張Volley的工作流程圖,如下圖所示。

多數朋友突然看到一張這樣的圖,應該會和我一樣,感覺一頭霧水吧?沒錯,目前我們對Volley背后的工作原理還沒有一個概念性的理解,直接就來看這張圖自然會有些吃力。不過沒關系,下面我們就去分析一下Volley的源碼,之后再重新來看這張圖就會好理解多了。

說起分析源碼,那么應該從哪兒開始看起呢?這就要回顧一下Volley的用法了,還記得嗎,使用Volley的第一步,首先要調用Volley.newRequestQueue(context)方法來獲取一個RequestQueue對象,那么我們自然要從這個方法開始看起了,代碼如下所示:

public static RequestQueue newRequestQueue(Context context) { return newRequestQueue(context, null); }

這個方法僅僅只有一行代碼,只是調用了

newRequestQueue()的方法重載,并給第二個參數傳入null。那我們看下帶有兩個參數的newRequestQueue()方法中的代碼,如下所示:

public static RequestQueue newRequestQueue(Context context, HttpStack stack) {File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR);String userAgent = "volley/0";try {String packageName = context.getPackageName();PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);userAgent = packageName + "/" + info.versionCode;} catch (NameNotFoundException e) {} if (stack == null) { if (Build.VERSION.SDK_INT >= 9) { stack = new HurlStack(); } else { stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent)); } } Network network = new BasicNetwork(stack); RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network); queue.start(); return queue; }

可以看到,這里在第10行判斷如果stack是等于null的,則去創建一個HttpStack對象,這里會判斷如果手機系統版本號是大于9的,則創建一個HurlStack的實例,否則就創建一個HttpClientStack的實例。實際上

HurlStack的內部就是使用HttpURLConnection進行網絡通訊的,而HttpClientStack的內部則是使用HttpClient進行網絡通訊的,這里為什么這樣選擇呢?可以參考我之前翻譯的一篇文章Android訪問網絡,使用HttpURLConnection還是HttpClient?

創建好了HttpStack之后,接下來又創建了一個Network對象,它是用于根據傳入的HttpStack對象來處理網絡請求的,緊接著new出一個RequestQueue對象,并調用它的start()方法進行啟動,然后將RequestQueue返回,這樣newRequestQueue()的方法就執行結束了。

那么RequestQueue的start()方法內部到底執行了什么東西呢?我們跟進去瞧一瞧:

public void start() { stop(); // Make sure any currently running dispatchers are stopped. // Create the cache dispatcher and start it. mCacheDispatcher = new CacheDispatcher(mCacheQueue, mNetworkQueue, mCache, mDelivery); mCacheDispatcher.start(); // Create network dispatchers (and corresponding threads) up to the pool size. for (int i = 0; i < mDispatchers.length; i++) { NetworkDispatcher networkDispatcher = new NetworkDispatcher(mNetworkQueue, mNetwork, mCache, mDelivery); mDispatchers[i] = networkDispatcher; networkDispatcher.start(); } }

這里先是創建了一個CacheDispatcher的實例,然后調用了它的start()方法,接著在一個for循環里去創建NetworkDispatcher的實例,并分別調用它們的start()方法。這里的CacheDispatcher和NetworkDispatcher都是繼承自Thread的,而默認情況下for循環會執行四次,也就是說當調用了Volley.newRequestQueue(context)之后,就會有五個線程一直在后臺運行,不斷等待網絡請求的到來,

其中

CacheDispatcher是緩存線程,NetworkDispatcher是網絡請求線程。

得到了RequestQueue之后,我們只需要構建出相應的Request,然后調用RequestQueue的add()方法將Request傳入就可以完成網絡請求操作了,那么不用說,add()方法的內部肯定有著非常復雜的邏輯,我們來一起看一下:

public <T> Request<T> add(Request<T> request) {// Tag the request as belonging to this queue and add it to the set of current requests. request.setRequestQueue(this);synchronized (mCurrentRequests) {mCurrentRequests.add(request);}// Process requests in the order they are added. request.setSequence(getSequenceNumber());request.addMarker("add-to-queue"); // If the request is uncacheable, skip the cache queue and go straight to the network. if (!request.shouldCache()) { mNetworkQueue.add(request); return request; } // Insert request into stage if there's already a request with the same cache key in flight. synchronized (mWaitingRequests) { String cacheKey = request.getCacheKey(); if (mWaitingRequests.containsKey(cacheKey)) { // There is already a request in flight. Queue up. Queue<Request<?>> stagedRequests = mWaitingRequests.get(cacheKey); if (stagedRequests == null) { stagedRequests = new LinkedList<Request<?>>(); } stagedRequests.add(request); mWaitingRequests.put(cacheKey, stagedRequests); if (VolleyLog.DEBUG) { VolleyLog.v("Request for cacheKey=%s is in flight, putting on hold.", cacheKey); } } else { // Insert 'null' queue for this cacheKey, indicating there is now a request in // flight. mWaitingRequests.put(cacheKey, null); mCacheQueue.add(request); } return request; }

可以看到,在第11行的時候會判斷當前的請求是否可以緩存,如果不能緩存則在第12行直接將這條請求加入網絡請求隊列,可以緩存的話則在第33行將這條請求加入緩存隊列。在默認情況下,每條請求都是可以緩存的,當然我們也可以調用Request的setShouldCache(false)方法來改變這一默認行為。

OK,那么既然默認每條請求都是可以緩存的,自然就被添加到了緩存隊列中,于是一直在后臺等待的緩存線程就要開始運行起來了,我們看下CacheDispatcher中的run()方法,代碼如下所示:

public class CacheDispatcher extends Thread { ……@Overridepublic void run() {if (DEBUG) VolleyLog.v("start new dispatcher");Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);// Make a blocking call to initialize the cache. mCache.initialize(); while (true) { try { // Get a request from the cache triage queue, blocking until // at least one is available. final Request<?> request = mCacheQueue.take(); request.addMarker("cache-queue-take"); // If the request has been canceled, don't bother dispatching it. if (request.isCanceled()) { request.finish("cache-discard-canceled"); continue; } // Attempt to retrieve this item from cache. Cache.Entry entry = mCache.get(request.getCacheKey()); if (entry == null) { request.addMarker("cache-miss"); // Cache miss; send off to the network dispatcher. mNetworkQueue.put(request); continue; } // If it is completely expired, just send it to the network. if (entry.isExpired()) { request.addMarker("cache-hit-expired"); request.setCacheEntry(entry); mNetworkQueue.put(request); continue; } // We have a cache hit; parse its data for delivery back to the request. request.addMarker("cache-hit"); Response<?> response = request.parseNetworkResponse(new NetworkResponse(entry.data, entry.responseHeaders)); request.addMarker("cache-hit-parsed"); if (!entry.refreshNeeded()) { // Completely unexpired cache hit. Just deliver the response. mDelivery.postResponse(request, response); } else { // Soft-expired cache hit. We can deliver the cached response, // but we need to also send the request to the network for // refreshing. request.addMarker("cache-hit-refresh-needed"); request.setCacheEntry(entry); // Mark the response as intermediate. response.intermediate = true; // Post the intermediate response back to the user and have // the delivery then forward the request along to the network. mDelivery.postResponse(request, response, new Runnable() { @Override public void run() { try { mNetworkQueue.put(request); } catch (InterruptedException e) { // Not much we can do about this. } } }); } } catch (InterruptedException e) { // We may have been interrupted because it was time to quit. if (mQuit) { return; } continue; } } }

代碼有點長,我們只挑重點看。首先在11行可以看到一個while(true)循環,說明緩存線程始終是在運行的,接著在第23行會嘗試從緩存當中取出響應結果,如何為空的話則把這條請求加入到網絡請求隊列中,如果不為空的話再判斷該緩存是否已過期,如果已經過期了則同樣把這條請求加入到網絡請求隊列中,否則就認為不需要重發網絡請求,直接使用緩存中的數據即可。之后會在第39行調用Request的

parseNetworkResponse()方法來對數據進行解析,再往后就是將解析出來的數據進行回調了,這部分代碼我們先跳過,因為它的邏輯和NetworkDispatcher后半部分的邏輯是基本相同的,那么我們等下合并在一起看就好了,先來看一下NetworkDispatcher中是怎么處理網絡請求隊列的,代碼如下所示:

public class NetworkDispatcher extends Thread { …… @Override public void run() { Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); Request<?> request; while (true) { try { // Take a request from the queue. request = mQueue.take(); } catch (InterruptedException e) { // We may have been interrupted because it was time to quit. if (mQuit) { return; } continue; } try { request.addMarker("network-queue-take"); // If the request was cancelled already, do not perform the // network request. if (request.isCanceled()) { request.finish("network-discard-cancelled"); continue; } addTrafficStatsTag(request); // Perform the network request. NetworkResponse networkResponse = mNetwork.performRequest(request); request.addMarker("network-http-complete"); // If the server returned 304 AND we delivered a response already, // we're done -- don't deliver a second identical response. if (networkResponse.notModified && request.hasHadResponseDelivered()) { request.finish("not-modified"); continue; } // Parse the response here on the worker thread. Response<?> response = request.parseNetworkResponse(networkResponse); request.addMarker("network-parse-complete"); // Write to cache if applicable. // TODO: Only update cache metadata instead of entire record for 304s. if (request.shouldCache() && response.cacheEntry != null) { mCache.put(request.getCacheKey(), response.cacheEntry); request.addMarker("network-cache-written"); } // Post the response back. request.markDelivered(); mDelivery.postResponse(request, response); } catch (VolleyError volleyError) { parseAndDeliverNetworkError(request, volleyError); } catch (Exception e) { VolleyLog.e(e, "Unhandled exception %s", e.toString()); mDelivery.postError(request, new VolleyError(e)); } } } }

同樣地,在第7行我們看到了類似的while(true)循環,說明網絡請求線程也是在不斷運行的。在第28行的時候會調用Network的performRequest()方法來去發送網絡請求,而Network是一個接口,這里具體的實現是BasicNetwork,我們來看下它的

performRequest()方法,如下所示:

public class BasicNetwork implements Network { …… @Override public NetworkResponse performRequest(Request<?> request) throws VolleyError { long requestStart = SystemClock.elapsedRealtime(); while (true) { HttpResponse httpResponse = null; byte[] responseContents = null; Map<String, String> responseHeaders = new HashMap<String, String>(); try { // Gather headers. Map<String, String> headers = new HashMap<String, String>(); addCacheHeaders(headers, request.getCacheEntry()); httpResponse = mHttpStack.performRequest(request, headers); StatusLine statusLine = httpResponse.getStatusLine(); int statusCode = statusLine.getStatusCode(); responseHeaders = convertHeaders(httpResponse.getAllHeaders()); // Handle cache validation. if (statusCode == HttpStatus.SC_NOT_MODIFIED) { return new NetworkResponse(HttpStatus.SC_NOT_MODIFIED, request.getCacheEntry() == null ? null : request.getCacheEntry().data, responseHeaders, true); } // Some responses such as 204s do not have content. We must check. if (httpResponse.getEntity() != null) { responseContents = entityToBytes(httpResponse.getEntity()); } else { // Add 0 byte response as a way of honestly representing a // no-content request. responseContents = new byte[0]; } // if the request is slow, log it. long requestLifetime = SystemClock.elapsedRealtime() - requestStart; logSlowRequests(requestLifetime, request, responseContents, statusLine); if (statusCode < 200 || statusCode > 299) { throw new IOException(); } return new NetworkResponse(statusCode, responseContents, responseHeaders, false); } catch (Exception e) { …… } } } }

這段方法中大多都是一些網絡請求細節方面的東西,我們并不需要太多關心,需要注意的是在第14行調用了HttpStack的performRequest()方法,這里的HttpStack就是在一開始調用newRequestQueue()方法是創建的實例,默認情況下如果系統版本號大于9就創建的HurlStack對象,否則創建HttpClientStack對象。前面已經說過,這兩個對象的內部實際就是分別使用HttpURLConnection和HttpClient來發送網絡請求的,我們就不再跟進去閱讀了,之后會將服務器返回的數據組裝成一個NetworkResponse對象進行返回。

在NetworkDispatcher中收到了NetworkResponse這個返回值后又會調用Request的parseNetworkResponse()方法來解析NetworkResponse中的數據,以及將數據寫入到緩存,這個方法的實現是交給Request的子類來完成的,因為不同種類的Request解析的方式也肯定不同。還記得我們在上一篇文章中學習的自定義Request的方式嗎?其中parseNetworkResponse()這個方法就是必須要重寫的。

在解析完了NetworkResponse中的數據之后,又會調用ExecutorDelivery的postResponse()方法來回調解析出的數據,代碼如下所示:

public void postResponse(Request<?> request, Response<?> response, Runnable runnable) { request.markDelivered(); request.addMarker("post-response"); mResponsePoster.execute(new ResponseDeliveryRunnable(request, response, runnable)); }

其中,在mResponsePoster的execute()方法中傳入了一個ResponseDeliveryRunnable對象,就可以保證該對象中的run()方法就是在主線程當中運行的了,我們看下run()方法中的代碼是什么樣的:

private class ResponseDeliveryRunnable implements Runnable { private final Request mRequest; private final Response mResponse; private final Runnable mRunnable; public ResponseDeliveryRunnable(Request request, Response response, Runnable runnable) { mRequest = request; mResponse = response; mRunnable = runnable; } @SuppressWarnings("unchecked") @Override public void run() { // If this request has canceled, finish it and don't deliver. if (mRequest.isCanceled()) { mRequest.finish("canceled-at-delivery"); return; } // Deliver a normal response or error, depending. if (mResponse.isSuccess()) { mRequest.deliverResponse(mResponse.result); } else { mRequest.deliverError(mResponse.error); } // If this is an intermediate response, add a marker, otherwise we're done // and the request can be finished. if (mResponse.intermediate) { mRequest.addMarker("intermediate-response"); } else { mRequest.finish("done"); } // If we have been provided a post-delivery runnable, run it. if (mRunnable != null) { mRunnable.run(); } } }

代碼雖然不多,但我們并不需要行行閱讀,抓住重點看即可。其中在第22行調用了Request的deliverResponse()方法,有沒有感覺很熟悉?沒錯,這個就是我們在自定義Request時需要重寫的另外一個方法,每一條網絡請求的響應都是回調到這個方法中,最后我們再在這個方法中將響應的數據回調到Response.Listener的onResponse()方法中就可以了。

好了,到這里我們就把Volley的完整執行流程全部梳理了一遍,你是不是已經感覺已經很清晰了呢?對了,還記得在文章一開始的那張流程圖嗎,剛才還不能理解,現在我們再來重新看下這張圖:

其中藍色部分代表主線程,綠色部分代表緩存線程,橙色部分代表網絡線程。我們在主線程中調用RequestQueue的add()方法來添加一條網絡請求,這條請求會先被加入到緩存隊列當中,如果發現可以找到相應的緩存結果就直接讀取緩存并解析,然后回調給主線程。如果在緩存中沒有找到結果,則將這條請求加入到網絡請求隊列中,然后處理發送HTTP請求,解析響應結果,寫入緩存,并回調主線程。

怎么樣,是不是感覺現在理解這張圖已經變得輕松簡單了?好了,到此為止我們就把Volley的用法和源碼全部學習完了,相信你已經對Volley非常熟悉并可以將它應用到實際項目當中了,那么Volley完全解析系列的文章到此結束,感謝大家有耐心看到最后。

總結

以上是生活随笔為你收集整理的Android Volley完全解析4:带你从源码的角度理解Volley的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲闷骚少妇在线观看网站 | 又湿又紧又大又爽a视频国产 | 亚洲粉嫩av | 成人免费共享视频 | 久久久www成人免费精品 | 在线看av网址 | 久久久影视 | 日本aaa在线观看 | 最新av电影网址 | 久久久国产在线视频 | 成人av片免费看 | 成人中文字幕在线 | 久久久久久视频 | 日韩二区在线播放 | a久久免费视频 | 欧美成年人在线观看 | 免费三级影片 | 国产日产精品一区二区三区四区的观看方式 | 一级片免费视频 | 日日添夜夜添 | 色婷婷啪啪免费在线电影观看 | 国精产品999国精产品视频 | 在线看国产日韩 | 999男人的天堂 | 久热这里有精品 | 欧美日韩在线免费观看 | 久草在线99 | 五月天激情综合 | 国产成人精品一区二三区 | 91av小视频| 亚洲va欧美va国产va黑人 | 国产在线资源 | 日韩av不卡在线观看 | av电影在线免费观看 | 在线播放av网址 | 精品久久在线 | 久久久免费看视频 | 日韩在线观看视频网站 | 久久试看 | 日本亚洲国产 | 色婷婷狠 | 婷婷爱五月天 | www色av| 亚洲女同ⅹxx女同tv | 国产一区二区三区四区大秀 | 中文字幕日韩有码 | 成人一级免费电影 | 欧美日韩调教 | 99爱在线观看 | 亚洲五月激情 | 久久91久久久久麻豆精品 | 国产精品99久久久久久有的能看 | 日日日日干 | 成年人在线免费看 | av片免费播放 | 黄色片视频免费 | 永久免费在线 | 国产精品人人做人人爽人人添 | 激情综合色图 | 日本中文字幕网站 | 91色视频| 国产精品美女免费 | 99精品久久久久久久 | 99精品视频在线免费观看 | 久久综合狠狠综合 | 在线观看激情av | 草免费视频 | av亚洲产国偷v产偷v自拍小说 | 精品亚洲国产视频 | 粉嫩av一区二区三区免费 | 超碰97人| 91精品国产一区二区在线观看 | 91精品国产自产91精品 | 欧美日韩国产综合一区二区 | 日韩一区二区三区免费电影 | 色在线免费| 中文字幕第一页在线 | 婷婷5月色 | 一级α片免费看 | 中文字幕在线免费看线人 | 日韩电影在线观看中文字幕 | 欧美 日韩 国产 成人 在线 | 免费一级片视频 | 黄色三几片 | 日韩网站在线 | 亚洲永久精品视频 | 国内三级在线观看 | 亚洲免费国产 | 91福利视频免费观看 | 久久嗨| 精品国产视频在线观看 | 亚洲黄色网络 | 最近更新好看的中文字幕 | 91亚洲精品久久久蜜桃借种 | 一 级 黄 色 片免费看的 | 丁香久久综合 | 色吊丝在线永久观看最新版本 | 99热这里精品 | 欧美午夜精品久久久久久孕妇 | 久久免费看视频 | 最新91在线视频 | 91在线免费播放 | 欧美综合色 | 久久久国产毛片 | 欧美精彩视频 | 婷婷激情站 | 欧美一级黄色网 | 91九色蝌蚪国产 | 国产剧在线观看片 | 久久久久久久免费 | 三级黄色免费 | 激情综合久久 | 久久精品视频免费观看 | 激情影院在线观看 | 亚洲激情五月 | 久久久九色精品国产一区二区三区 | 狠狠gao | 国产一二区视频 | 国模视频一区二区三区 | 日韩精品一卡 | 天天操夜夜操天天射 | 亚洲天堂网在线播放 | 亚洲午夜激情网 | 国产精品成人自产拍在线观看 | 欧美日高清视频 | 亚洲第二色 | 91日韩国产| 激情欧美xxxx | 正在播放亚洲精品 | 欧美性色19p| 国产精品伦一区二区三区视频 | 国产成人资源 | 日韩av在线小说 | 极品美女被弄高潮视频网站 | 天海冀一区二区三区 | 在线播放 亚洲 | 人人插人人玩 | 91在线免费看片 | 国产成人精品午夜在线播放 | 久久99免费视频 | 久久综合九色综合久99 | 精品久久九九 | 亚洲春色综合另类校园电影 | 最新av在线播放 | 中文字幕第一页在线 | 美女免费网视频 | 欧洲亚洲国产视频 | 亚洲精品小区久久久久久 | 2021国产精品视频 | 日韩午夜精品福利 | 在线免费中文字幕 | www.xxx.性狂虐 | 久久er99热精品一区二区 | 精品久久久久久久久久久久久 | 中文字幕 91 | 成人av在线看 | 免费男女羞羞的视频网站中文字幕 | 黄色小视频在线观看免费 | 久久乐九色婷婷综合色狠狠182 | 中文在线免费视频 | av看片在线观看 | 免费视频你懂得 | 亚洲国产影院av久久久久 | 亚洲最新精品 | 日韩三级视频在线观看 | 美女视频免费精品 | 91人人人 | 久久精品国产精品亚洲 | 视频一区视频二区在线观看 | 日本精品视频免费观看 | 精品久久网站 | 99视频导航| 日韩在线色视频 | 欧美韩日在线 | 五月天综合激情网 | 久久免费看 | 天天插夜夜操 | 久精品在线| 日p视频在线观看 | 久久久久久久久久毛片 | 日日操天天爽 | 国产一区免费在线观看 | 国产九九九精品视频 | 人人dvd | 国产色拍 | 国产一区二区午夜 | 日本一区二区三区免费观看 | 91精品国产三级a在线观看 | 精品久久久国产 | 91av电影在线 | 中文字幕丝袜一区二区 | 成人免费观看网站 | 亚洲区另类春色综合小说校园片 | 亚洲精品在线一区二区三区 | 日韩高清一 | 伊人久久婷婷 | 亚洲精品动漫成人3d无尽在线 | 最近中文字幕 | 国产99精品在线观看 | jizz999| 中文字幕av在线不卡 | 久草影视在线 | 国产精品久久99精品毛片三a | 欧美最新另类人妖 | 美女视频黄是免费的 | 国产午夜激情视频 | 国产专区欧美专区 | 99视频在线观看免费 | 欧美激情综合五月色丁香 | 欧美日韩在线视频一区二区 | 99久久精品免费看国产免费软件 | 又黄又爽免费视频 | 国产高清在线a视频大全 | 国产在线一区二区三区播放 | 亚洲情感电影大片 | 欧美精品少妇xxxxx喷水 | 亚洲国产精品视频 | 天天综合色天天综合 | 欧美地下肉体性派对 | 国产伦精品一区二区三区在线 | 欧美一级淫片videoshd | 免费观看的黄色片 | 国产a网站 | 国内精品久久久精品电影院 | 国产福利91精品 | 91污在线| 欧美激情精品久久久 | 国产中出在线观看 | 最近中文字幕国语免费av | 97成人精品视频在线观看 | 久久99电影| 日韩三级一区 | 国产黄色资源 | 国产成人精品一区二区在线观看 | 五月激情姐姐 | 国产精品久久久久久久毛片 | 欧美成年人在线视频 | 成人黄色小说视频 | 91污视频在线观看 | 久久精品这里精品 | 99精品在线免费在线观看 | 精品视频免费在线 | 久久一区二区三区日韩 | 伊人网综合在线观看 | 免费情缘| 视频三区在线 | 久久综合免费视频影院 | 久久久免费视频播放 | 日韩一区在线播放 | 国产精品免费久久久久影院仙踪林 | 亚洲精品乱码久久久久久久久久 | 91爱看片 | 国产在线p | 在线播放亚洲 | 人人插人人 | 精品自拍sae8—视频 | 国产精品久久久久久久免费 | 十八岁以下禁止观看的1000个网站 | 香蕉网站在线观看 | 欧美日韩视频在线 | 成人免费视频在线观看 | 日本精品久久 | 国产高清中文字幕 | 久久久久久久久久久影视 | 天天干,天天操,天天射 | 免费黄色在线网站 | 亚洲精品视频在线观看网站 | 亚洲成人在线免费 | 色综合久久久久久久 | 91精品国产91久久久久福利 | 久久99网站 | 久久这里精品视频 | 精壮的侍卫呻吟h | 国产午夜精品一区 | 狠狠干婷婷色 | 91九色蝌蚪国产 | 97视频免费在线观看 | 国产精品午夜8888 | 日韩一级片观看 | 国产精品ⅴa有声小说 | 天天射天天色天天干 | 成人一级片在线观看 | 欧美激情综合五月色丁香小说 | 国产精品国产三级国产不产一地 | 国产成人a亚洲精品v | 伊人资源视频在线 | 久久福利国产 | 日韩黄色av网站 | 偷拍福利视频一区二区三区 | 欧美二区三区91 | www.av在线.com | 久草久视频 | 在线观看黄色的网站 | 国产精品一区二区av影院萌芽 | 欧美精品在线观看免费 | 狠狠操.com | 精品v亚洲v欧美v高清v | www免费在线观看 | 丁香婷婷深情五月亚洲 | 国产va饥渴难耐女保洁员在线观看 | 日日夜夜免费精品视频 | 中文字幕日韩一区二区三区不卡 | 99久久99久久| 亚洲激情一区二区三区 | 国产精品成人自产拍在线观看 | av电影在线观看 | 国产日产欧美在线观看 | 在线婷婷 | 国产区在线 | 91视频高清完整版 | 中文字幕文字幕一区二区 | 亚洲 欧美 成人 | 激情文学综合丁香 | 久久一区91| 午夜国产在线观看 | 美女免费电影 | 精品一区二区三区在线播放 | 中文字幕五区 | 视频福利在线观看 | 国产精品videossex国产高清 | 日韩av中文在线 | 99精品视频在线看 | 久久久www成人免费毛片 | 国产一级二级三级视频 | 亚洲欧洲精品一区二区 | 免费黄色在线网址 | 黄色精品国产 | 日韩精品一二三 | 超碰97国产在线 | 欧美日韩国产综合一区二区 | 天天干天天干天天干天天干天天干天天干 | 国产精品观看视频 | 一区二区三区中文字幕在线观看 | 在线va视频 | 精品国产一区二区三区在线观看 | 久久黄色片 | 成年人免费在线播放 | 成人av在线影院 | 国产亚洲小视频 | 免费看v片网站 | 国产 亚洲 欧美 在线 | 国产精品一区在线观看你懂的 | 五月天激情综合 | 久久精品国产免费看久久精品 | av三区在线 | 亚洲第一色| 成人久久国产 | 九九免费精品 | 在线之家官网 | 一二区av| 久久久精品国产免费观看同学 | 日韩精品一区二区三区高清免费 | 免费男女网站 | 狠狠色狠狠色综合日日小说 | 日韩中文字幕免费视频 | 亚洲综合色婷婷 | 精品 激情 | 日韩免费电影一区二区三区 | 久久久久成人精品免费播放动漫 | 亚洲va欧洲va国产va不卡 | 91中文字幕视频 | 成人毛片久久 | 97超碰中文字幕 | 五月婷婷色综合 | 日日激情| 99草视频在线观看 | 国产精品久久久久久久午夜片 | 国产午夜精品一区二区三区 | 久久人人插 | 久久夜夜爽 | 国产最新视频在线观看 | 麻豆成人在线观看 | 曰本免费av | 日本久久久亚洲精品 | 麻豆免费视频 | 亚洲免费在线观看视频 | 精产嫩模国品一二三区 | 黄色aaa级片 | 一区二区三区在线视频111 | 激情欧美一区二区免费视频 | 射久久| 国产亚洲精品bv在线观看 | 久久亚洲电影 | 欧美日韩高清在线 | 欧美日韩性视频在线 | 国产精品久久99 | 五月天天色 | 日韩特黄一级欧美毛片特黄 | 黄色录像av | 欧美一二在线 | av在线h | 88av视频| 天天草天天操 | 麻豆视频入口 | 人人射人人澡 | 国产精品乱码久久久 | 亚洲专区在线视频 | 激情电影影院 | 日韩在线欧美在线 | av资源网在线播放 | 亚洲成人午夜在线 | 日韩专区中文字幕 | 一级α片免费看 | 亚洲国产中文在线 | 97超碰在线播放 | 久久精品99视频 | av短片在线 | 五月婷婷黄色网 | 国内99视频| 综合婷婷久久 | 麻豆一二三精选视频 | 中文字幕在线观看视频网站 | 成人免费观看完整版电影 | 天堂av最新网址 | 成人亚洲免费 | 欧美片一区二区三区 | 超碰免费97 | 日本在线成人 | 中文字幕欧美激情 | 99久久99久久综合 | 久久综合久久综合九色 | 午夜私人影院久久久久 | 久久草视频| 中文字幕日本在线观看 | 日韩激情一二三区 | 日本精品视频在线 | 精品一区 在线 | 免费色视频网址 | 成人欧美日韩国产 | 在线看黄色的网站 | 天天操天天是 | 99热这里精品| 天天插天天操天天干 | 狠狠插天天干 | 久久黄色美女 | 亚洲午夜久久久久久久久电影网 | 免费在线观看黄网站 | 五月天色站 | av三级av| 色婷婷激情| 日韩电影黄色 | 欧美乱淫视频 | 免费看的黄色的网站 | av大全免费在线观看 | 丁香花在线观看免费完整版视频 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 日韩在线视频看看 | 成人中文字幕av | 日韩电影中文,亚洲精品乱码 | 欧美一区三区四区 | 精品一区二区av | 久久久精品一区二区 | 久久精品视频免费 | 婷婷色5月| 在线观看av免费 | 麻豆果冻剧传媒在线播放 | 日日天天干 | 在线免费观看国产精品 | 国产资源在线免费观看 | 国产成人av电影 | 国产原创在线视频 | 91九色在线观看视频 | 日韩理论在线播放 | 91精品秘密在线观看 | 久久久久色| 免费在线观看成人 | 国产精品区一区 | 成人91免费视频 | 综合在线观看色 | 亚洲aaa级| 成人h视频在线 | 正在播放日韩 | 国产精品18久久久久久vr | 黄色天堂在线观看 | 亚洲美女在线国产 | 成人禁用看黄a在线 | 国产一级做a爱片久久毛片a | 精品视频999 | 99视频在线观看一区三区 | 国产视频二 | 波多野结衣视频一区二区 | 麻豆视频免费 | 久久一区二区三区国产精品 | 99热这里只有精品8 久久综合毛片 | 亚洲成av人影片在线观看 | 亚洲一区精品二人人爽久久 | 九色福利视频 | 有码中文字幕 | 免费看久久 | 三级av中文字幕 | 欧美日韩在线网站 | 国产精品精品国产婷婷这里av | 特级毛片在线免费观看 | 91黄色免费看 | www.国产在线视频 | av+在线播放在线播放 | 麻豆久久久 | 91av原创 | 精品久久久久久一区二区里番 | 久久久精品一区二区 | 久久久久久久久久久久久久免费看 | 91精品久久久久久粉嫩 | 午夜免费福利片 | 日本丰满少妇免费一区 | 天堂在线视频中文网 | 免费福利在线播放 | 精品 激情 | 美女视频a美女大全免费下载蜜臀 | 午夜精品一区二区三区免费视频 | 精品91在线 | 国产高清久久 | av一级网站 | 亚洲精品久久久久久国 | 国产亚洲精品久久久久久无几年桃 | 四虎在线视频免费观看 | 激情视频在线高清看 | 久久久久久网站 | av成人在线网站 | 中文字幕日韩av | 欧美日韩电影在线播放 | 在线中文字幕视频 | 婷婷中文字幕综合 | 中文字幕在线观看免费高清完整版 | 丁香婷婷久久 | 五月天激情综合 | 精品国产一区二区三区久久久久久 | 一本一本久久a久久精品综合小说 | 亚洲人xxx | 黄色国产区 | 亚洲高清视频在线播放 | 丁香婷婷自拍 | 国产黄色一级片 | 91一区二区三区在线观看 | 中文字幕免费久久 | 日本黄色免费播放 | 亚州av成人 | 在线观看亚洲免费视频 | 久久一区二区免费视频 | 国产精品毛片一区视频播不卡 | 91在线看免费 | 精品一区二区在线免费观看 | 亚洲精品播放 | 9999亚洲 | 免费视频区 | 91精品免费在线视频 | 一个色综合网站 | a在线视频v视频 | 成人av日韩 | 最近中文字幕mv | av成人动漫在线观看 | 日韩激情影院 | 欧美久久久久久久久久久久 | 日日操日日 | 99久久婷婷国产精品综合 | 婷婷综合亚洲 | 久久96国产精品久久99软件 | 91自拍91| 亚洲精品视频在 | 亚洲午夜久久久久 | 99福利影院 | 精品在线看 | 丁香六月激情 | 在线只有精品 | 黄色在线观看污 | 国产一区播放 | 黄色亚洲免费 | 青青河边草观看完整版高清 | 日本最新中文字幕 | 男女全黄一级一级高潮免费看 | 在线观看黄色小视频 | 精品国内自产拍在线观看视频 | 亚洲欧美日韩精品久久奇米一区 | 亚洲美女在线一区 | 亚洲国产高清视频 | 婷婷综合视频 | 中午字幕在线 | 超碰人人超 | 久久优 | 精品99久久 | 99性视频| 91色九色 | 国产精品手机看片 | 国产精品久久久久久高潮 | 免费三级黄| 五月婷婷在线播放 | av福利第一导航 | 狠狠干夜夜操 | 国产精品精品久久久 | 精品久久久久一区二区国产 | 麻豆成人在线观看 | 日日夜夜噜噜噜 | 91毛片视频 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 婷婷在线免费 | 久久免费视频2 | 日韩在线观看网址 | 国产精品久久久久一区二区 | 96久久欧美麻豆网站 | 欧美极品久久 | 国产成人av一区二区三区在线观看 | 亚洲高清在线观看视频 | 日韩高清免费无专码区 | 亚洲视频在线播放 | 99九九热只有国产精品 | 国产伦理一区 | 天天操人人要 | 欧美激情视频一二区 | 久久久影院一区二区三区 | 91网站在线视频 | 麻豆视频在线播放 | 久久99久久99精品 | 日韩高清成人在线 | 成人免费在线播放视频 | 久久免费电影网 | 亚洲国产成人在线播放 | 国产91国语对白在线 | 欧美亚洲专区 | 国产污视频在线观看 | 天干啦夜天干天干在线线 | 久久99久久久久久 | 日韩在线短视频 | 91桃色免费观看 | 国产精品视频免费 | 免费成人在线观看视频 | 午夜资源站 | 午夜电影 电影 | 国产乱对白刺激视频不卡 | 国产成人精品一区二区三区在线观看 | 狠狠干狠狠操 | 国产99久久精品一区二区永久免费 | 一区二区三区视频在线 | 欧美a在线免费观看 | 天天摸日日操 | 精品 一区 在线 | 在线电影 一区 | 91在线小视频 | 999久久| 国内成人精品视频 | 国产原创在线 | 青青河边草免费直播 | 日韩欧三级| 一区免费观看 | 精品久久一区二区三区 | 在线香蕉视频 | 99人成在线观看视频 | 玖玖爱在线观看 | 在线观看国产一区 | www.黄色小说.com | 国产高清成人av | 国产精品久久久久久久久久久久冷 | 九九九热精品免费视频观看网站 | 91精品蜜桃| 国产精品一区二区av | 国产色资源 | 国产99久久精品 | 久久久久久久久久久久久9999 | 久久五月婷婷综合 | 在线观看免费视频 | 国产亚洲一区二区三区 | 中文字幕在线观看网 | 亚洲手机av | 91精品国产综合久久久久久久 | 97精品欧美91久久久久久 | 久久福利精品 | 久草在线视频国产 | 久久视频精品在线观看 | 国产剧在线观看片 | 九九免费视频 | 精品久久免费 | 国产 日韩 在线 亚洲 字幕 中文 | 成人国产精品一区二区 | 精品久久久久久久久中文字幕 | 久久久免费看视频 | 亚洲国产高清视频 | 亚洲天堂网在线观看视频 | 免费av大全 | 九九热国产 | 狠狠色丁香久久综合网 | 国产黄色一级片 | 美女免费视频一区二区 | 国产成人精品在线播放 | 成人在线观看你懂的 | 99视频精品 | 亚洲一级在线观看 | 欧美成年人在线观看 | 99久久精品国产一区二区成人 | 国产精品永久免费在线 | 国产精品久久久久久久久久久免费看 | 欧美黑吊大战白妞欧美 | av中文资源在线 | 日韩有色| 国产做a爱一级久久 | 在线观看免费成人 | 国产精品99久久久久久久久 | 中文字幕字幕中文 | 天天操天天射天天爱 | 黄网站免费大全入口 | 在线高清一区 | 一区二区三区电影在线播 | 手机成人在线电影 | 黄色aa久久| 精品视频久久 | 国产视频不卡一区 | 热久精品 | 久草在线免费看视频 | 天天操夜夜叫 | 午夜精品福利在线 | 色姑娘综合| 精品视频www | 亚洲视频在线观看免费 | 婷婷丁香综合 | 成人免费一区二区三区在线观看 | 98涩涩国产露脸精品国产网 | 综合天堂av久久久久久久 | 久久精品这里精品 | 日韩av免费网站 | 久久天天躁夜夜躁狠狠85麻豆 | 一区二区三区四区五区在线 | 福利片视频区 | 国产视频不卡一区 | 欧美日韩一级在线 | 人人澡人 | 91传媒在线看 | 99热手机在线 | 日韩一级黄色片 | 欧美成a人片在线观看久 | 久久男人中文字幕资源站 | 黄色免费观看网址 | 欧美日韩不卡一区二区 | 狠狠狠色丁香婷婷综合久久五月 | 成人丁香花 | 91av在线免费看 | 天天干干| 91久久精品一区二区三区 | 人人看黄色 | av一级黄| 成年人看片| av 一区 二区 久久 | 国产 一区二区三区 在线 | 亚洲三级网 | 日韩免费视频播放 | 91日韩在线专区 | 亚洲蜜桃在线 | 在线免费试看 | 久久久久久久网站 | 五月开心六月伊人色婷婷 | 99久久毛片 | 亚洲综合最新在线 | 久久高清免费观看 | 亚洲一区二区三区四区精品 | 中文字幕高清视频 | 久草在线电影网 | 婷婷色婷婷 | 麻豆久久久久久久 | 欧美一区在线观看视频 | 久久精品人 | 日韩国产欧美在线视频 | 在线不卡的av | 西西www4444大胆视频 | 丁香高清视频在线看看 | 在线日本看片免费人成视久网 | 日韩免费视频线观看 | 在线观av| 亚洲国产成人在线 | 91综合视频在线观看 | 97福利在线 | 1024久久| 国产成人精品aaa | 久久精品专区 | 色综合天天综合 | 国产高清日韩欧美 | 正在播放亚洲精品 | 婷婷色中文 | 久久综合色天天久久综合图片 | 亚洲高清在线精品 | 欧美日韩在线观看一区二区三区 | 九九av| 国产五月天婷婷 | 免费看一及片 | 国产中文字幕在线播放 | 久久久久国产精品一区 | 亚洲综合最新在线 | 欧美国产日韩一区二区三区 | 久久久久久99精品 | 蜜臀一区二区三区精品免费视频 | 国色综合 | 91视频久久 | 国产亚洲永久域名 | 人人添人人澡人人澡人人人爽 | 欧美日韩视频在线观看一区二区 | 成人理论在线观看 | 亚洲激情六月 | 欧美日韩aa | 日韩com| 四虎成人精品 | 久久久亚洲国产精品麻豆综合天堂 | 欧美精品v国产精品v日韩精品 | 成人一级视频在线观看 | 久久涩视频 | 最近在线中文字幕 | 91在线区 | 91看片网址| 中文字幕乱在线伦视频中文字幕乱码在线 | 欧美精品久久久久性色 | 最近中文国产在线视频 | 日韩中文字幕91 | ,午夜性刺激免费看视频 | 国产短视频在线播放 | 丁香视频免费观看 | 日日摸日日碰 | 国产在线观看免费观看 | 天天射网站 | 日韩精品免费在线 | www中文在线 | 国产麻豆精品免费视频 | 91精品久久香蕉国产线看观看 | 狠狠狠色丁香综合久久天下网 | 国产九九精品视频 | 国产在线视频在线观看 | 国产美女视频免费观看的网站 | 亚洲欧美视屏 | 99精品国产一区二区三区不卡 | 国产成人一区二 | 日韩精品一区在线观看 | 久草av在线播放 | 色综合久久88色综合天天人守婷 | 精壮的侍卫呻吟h | 亚洲天堂精品视频在线观看 | 亚洲精品在线观看不卡 | 日韩videos | 色视频在线免费 | 成年人视频在线观看免费 | 九九热视频在线播放 | 精品国偷自产在线 | www.com.黄 | 在线精品在线 | 中文av字幕在线观看 | 天天做日日爱夜夜爽 | 欧美一区在线观看视频 | 天天爽天天爽天天爽 | 国产精品系列在线观看 | 日本h视频在线观看 | 久久99国产综合精品 | 91亚洲激情| 婷五月天激情 | 91人人视频在线观看 | 亚州精品一二三区 | 91精品国产乱码久久 | 免费看搞黄视频网站 | 久久久免费视频播放 | 精品视频区| 亚洲成av人片在线观看 | 中文字幕在线观 | 亚洲国产精品999 | 日韩精品一区二区三区外面 | 91在线免费公开视频 | 久久国产精品精品国产色婷婷 | 国产小视频福利在线 | 欧美巨大 | 有码视频在线观看 | 久久视频免费 | 国产精品美女久久 | 97精品视频在线播放 | 婷婷av电影 | 亚洲欧美日韩国产一区二区 | 久久人人看 | a爱爱视频| 天天做天天爱夜夜爽 | 精品视频久久久久久 | 日韩精品视频免费专区在线播放 | 亚洲欧美日韩在线一区二区 | 成人黄色电影免费观看 | 国产日韩视频在线观看 | 久久影院一区 | 一区二区三区四区五区六区 | 久久午夜鲁丝片 | 午夜精品一区二区三区视频免费看 | 国产精品久久久久久久免费大片 | 毛片a级片 | 国产精品一区二区在线观看免费 | 婷婷激情网站 | 黄色国产高清 | 久久久国产精品久久久 | 四虎永久免费网站 | 亚洲伊人色 | 精品视频免费久久久看 | 在线观看亚洲国产精品 | 日韩电影在线一区 | 伊人狠狠操| 久久久午夜精品理论片中文字幕 | 国产日韩精品视频 | 一区二区三区四区免费视频 | 国产精品videossex国产高清 | 激情久久久 | 人人搞人人搞 | 婷婷伊人五月 | 国产美女精品在线 | 午夜在线免费观看视频 | 人人干在线观看 | 欧美日韩国产亚洲乱码字幕 | 激情综合网五月婷婷 | 伊人国产视频 | 婷婷久久综合网 | 免费在线视频一区二区 | 免费av高清 | 九九国产视频 | 91在线观看黄 | 成人黄色国产 | 99久久日韩精品免费热麻豆美女 | 国产精品久久久久一区二区三区共 | 色在线亚洲 | 91一区二区三区在线观看 | 在线黄av| 在线观看完整版 | 91香蕉视频黄色 | 午夜.dj高清免费观看视频 | 欧美一级性生活片 | 久草综合在线 | 国产精品网站一区二区三区 | 黄色精品久久 | 国产视频高清 | 人人爱人人添 | 午夜久草| 日韩精品大片 | av理论电影| 国产精品视频区 | 国产亚洲精品久久久久久电影 | 免费三级骚| 夜夜操天天操 | 国产精品粉嫩 | 天天草天天摸 | 日日夜夜狠狠干 | 91免费在线播放 | 色99色 | 国产精品日韩在线播放 | 国产美女精品视频免费观看 | 久久国产高清 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 日韩激情视频在线观看 | 国产精品99久久久久久小说 | 精品视频久久久久久 | 97色婷婷成人综合在线观看 | 91丨精品丨蝌蚪丨白丝jk | 久久99久久99精品免观看粉嫩 | 午夜久久 | 免费视频xnxx com | 亚洲乱亚洲乱亚洲 | 色香蕉在线 | 色综合久久综合中文综合网 | 久久69av| 国产69精品久久久久99尤 | 夜夜骑天天操 | 2019天天干天天色 | 一级一片免费视频 | 久久任你操 | 99精品国产在热久久 | 美女黄频| 99久久精品网| 精品国内自产拍在线观看视频 | av在线播放亚洲 | 麻豆国产露脸在线观看 | 色人久久 | 最新av网站在线观看 | 有没有在线观看av | 日韩欧美高清一区二区三区 | 亚洲精品动漫成人3d无尽在线 | av五月婷婷 | 国产美女精品在线 | 五月婷婷电影网 | 国产视频 亚洲视频 | 91麻豆精品国产91久久久久 | 亚洲v欧美v国产v在线观看 | 久久99视频 | 国产成人精品av在线观 | 国产成人区 | 国产综合91 | 日韩欧美91| 不卡国产在线 | www激情久久 | 亚洲毛片久久 | 能在线观看的日韩av | 黄色免费观看网址 | 亚洲国产精品va在线看黑人动漫 | 成人免费观看a | 正在播放亚洲精品 | 免费午夜在线视频 | 久久99久国产精品黄毛片入口 | 中文字幕av免费观看 | 在线观看亚洲免费视频 | 视频在线观看入口黄最新永久免费国产 | 视频成人| 在线黄av| 免费日韩在线 | 不卡电影一区二区三区 | 国产精品综合久久久久久 | 天天操天天操天天干 | 在线免费视频一区 | 久久久久久久久久久福利 |