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

Android中導(dǎo)致內(nèi)存泄漏的竟然是它----Dialog

移動開發(fā) Android
Android 中 Activity 代表一個頁面,擁有一段生命周期,生命周期結(jié)束后,Activity 對象應(yīng)當(dāng)在之后某個合適的時機(jī)被 VM 回收內(nèi)存。出現(xiàn)了泄漏就意味著 Activity 生命周期結(jié)束后,VM發(fā)現(xiàn) Activity 一直被持有,沒有回收這些無用的內(nèi)存。

一. 內(nèi)存泄漏的 Bug 猛增

最近在 App 進(jìn)行 mokey 測試的時候檢測到一些內(nèi)存泄漏問題。在前天的測試中,樓主一瞬間收到了4個這樣的 Bug 單,瞬間心理無比糾結(jié),真有千萬只羊駝向我奔來。

 

 

 

 

登錄頁面出現(xiàn)內(nèi)存泄漏??!!樓主的代碼是如此的***而無懈可擊,這么可能出現(xiàn)這么多泄漏的問題?

插播什么是 Activity 泄漏:Android 中 Activity 代表一個頁面,擁有一段生命周期,生命周期結(jié)束后,Activity 對象應(yīng)當(dāng)在之后某個合適的時機(jī)被 VM 回收內(nèi)存。出現(xiàn)了泄漏就意味著 Activity 生命周期結(jié)束后,VM發(fā)現(xiàn) Activity 一直被持有,沒有回收這些無用的內(nèi)存。

按照以往的經(jīng)驗,大部分 Activity 泄漏的原因都是由于 Handler 內(nèi)部類長時間掛在線程中導(dǎo)致的。而這塊我們 App 已經(jīng)考慮便處理了。究竟是哪泄漏了?

二. WebView 導(dǎo)致內(nèi)存泄漏眾所周知

帶著懷疑的心態(tài)并且為了證明清白,我一個個點進(jìn)去看了,總共有三條不同的引用鏈。為了后續(xù)說明,這里取了個名字:

① AuthDialog 引用鏈

 

 

 

 

② BrowserFrame 引用鏈

 

 

 

 

③ IClipboradDataPaste 引用鏈

 

 

 

 

看來這次情況有點不同!由于 Monkey 測試的機(jī)型比較少,這里所有的 Bug 都來自一部三星 GT-I9300@android+4.3 手機(jī)。

為了快速解決問題,樓主詢問了其他同事和 StackOverflow,發(fā)現(xiàn)這其中有三個類 CookieSyncManager, WebView, WebViewClassic 已經(jīng)被很多人提起過,它們會導(dǎo)致內(nèi)存泄漏!初步有如下的結(jié)論如下:

1.CookieSyncManager 是個全局靜態(tài)單例,操作系統(tǒng)內(nèi)部使用了 App 的 Activity 作為 Context 構(gòu)造了它的實例。我們應(yīng)該在 App 啟動的時候,搶先幫系統(tǒng)創(chuàng)建這個單例,而且要用 applicationContext,讓它不會引用到 Activity。

 

 

 

 

2.使用 WebView 的頁面(Activity),在生命周期結(jié)束頁面退出(onDestory)的時候,需要主動調(diào)用 WebView.onPause()以及 WebView.destory()以便讓系統(tǒng)釋放 WebView 相關(guān)資源。

 

 

 

 

4.WebView 內(nèi)存泄漏是眾所周知的,建議另外啟動一個進(jìn)程專門運行 WebView。不要9998,不要9999,我們要100%!WebView 用完之后就把進(jìn)程殺死,即使泄漏了也無礙。

按照以上的種種結(jié)論,我們都認(rèn)定了這里面就是 WebView 引起的。

但是!我們的應(yīng)用主進(jìn)程 LoginActivity 根本沒有用到 WebView 啊!!!

三. 第三方 jar 包使用 WebView 這可如何是好

根據(jù)以上的 AuthDialog 引用鏈,樓主把目標(biāo)鎖定了某sdk:

翻了一陣子惡心的混淆后的代碼,找到下面這么一段。SDK 確實創(chuàng)建了 WebView 實例,并且用的是客戶程序的 Activity 對象作為 WebView 的 Context 如下:

c 跟 j 都是 SDK 中繼承于 WebView 的一個子類,k 是登錄接口的輸入?yún)?shù) Activity。這里創(chuàng)建了 c 對象之后向上塑形賦給了 j 。

 

 

 

 

網(wǎng)上已經(jīng)有很多例子表明,直接用 Activity 作為參數(shù)構(gòu)建 WebView 就非常有可能導(dǎo)致 Activity 泄漏。

 

 

 

 

不過也看到了代碼中,有調(diào)用了 WebView 的 destory()方法釋放資源。但是這里似乎無法保證 dismiss()一定會被執(zhí)行。

 

 

 

 

問題到這里發(fā)現(xiàn)比較麻煩了,SDK 對我們來說是第三方包,我們沒法讓第三方包不用 WebView,或者讓第三方包把 WebView 放在另外一個進(jìn)程中運行啊!于是,在 App 上面做規(guī)避暫時不好實現(xiàn)。于是找了 SDK 的童鞋一起分析了。

最終,大家都有了一個初步的共識,在 Android4.3 以下的舊版本,使用 Activity 對象創(chuàng)建 WebView,確實有可能導(dǎo)致內(nèi)存泄漏。非常高興能得到 SDK 童鞋的大力支持,一起分析,問題到這里有了初步的進(jìn)展。

四. 心結(jié)未解,翻看WebView源碼了解根源

不過,問題到這里樓主心理還是有個很嚴(yán)重的疑惑沒有解開(是什么疑惑呢?)。于是拿了 Android4.3 的源碼又翻了一遍希望找尋這里頭的根本原因,做了一點記錄,針對 WebView 在 Java 層的結(jié)構(gòu)畫了一個不嚴(yán)謹(jǐn)?shù)念悎D:源碼來源:http://androidxref.com/4.3_r2.1/ (請復(fù)制以上鏈接到瀏覽器打開)

 

 

 

 

大概情況是這樣:WebView 這套結(jié)構(gòu)中,有一個工廠類 WebViewFactory 提供靜態(tài)方法。

Android4.3(JellyBean) 版本通過 WebViewFactory 工廠類創(chuàng)建了一個全局單例對象 WebViewClassic$Factory,然后使用這個 Factory 創(chuàng)建了一整套實現(xiàn)的代碼(XXXClassic):WebViewClassic, CookieManagserClassic, WebViewDatabaseClassic。

WebViewClassic 才是真正地實現(xiàn) WebView 的各種 API。WebViewClassic 創(chuàng)建并維護(hù)了 WebViewCore 對象。

WebViewCore 創(chuàng)建了一個子線程“WebViewCoreThread”,這里是一個全局的單例的而且一旦啟動就不會停止的 Thread!WebViewCore 會在這個子線程中創(chuàng)建維護(hù)并調(diào)用 BrowserFrame 的方法。

BrowserFrame 本身是一個屬于“WebViewCoreThread”線程的 Handler 子類。BrowserFrame 會被 native(c++) 層調(diào)用,然后將這些調(diào)用切換到“WebViewCoreThread”線程中去執(zhí)行,比如刷新進(jìn)度或者處理屏幕旋轉(zhuǎn)事件等等。

BrowserFrame 還會調(diào)用 CookieSyncManager.createIntance(),這也是系統(tǒng)框架中唯一一處調(diào)用的地方!

 

 

 

 

看到這里之后,樓主發(fā)現(xiàn)以上所說的,提前幫系統(tǒng)調(diào)用

CookieSyncManager.createInstance(contenxt.getApplicationContext()) 可能是沒有效果的,因為系統(tǒng)本來就是這么做的。手機(jī)廠商修改這里的可能性不大。

CookieSyncManager 又是什么東西?同樣的,它自己也創(chuàng)建一個子線程,線程名就叫“CookieSyncManager”,又是全局單例不會停!這個線程每過5分鐘就會把緩存在內(nèi)存中的 Cookie 進(jìn)行持久化 syncFromRamToFlash()。

這里我們比較關(guān)心為什么 Activity 會泄漏,所以關(guān)鍵看看哪些類對象中持有了 Activity(Context) 引用:WebViewClassic, WebViewCore, BrowserFrame。

這套結(jié)構(gòu)中有很多靜態(tài)單例,還有子線程,想想也挺惡心的。而且三個關(guān)鍵的類都持有 Activity 引用。不過我們發(fā)現(xiàn),其實 WebViewClassic, WebViewCore 這兩個個對象跟 WebView 對象的生命周期是一致的,Activity 銷毀于是 WebView 銷毀了,WebView 銷毀了另外兩個對象也跟著銷毀。煙消云散。。。

留下兩個孤獨的子線程還在跑,還有全局靜態(tài)的釘子戶對象。

但是!BrowserFrame 本身是 Handler,假如它因為 native 層的調(diào)用往”WebViewCoreThread”掛了一個消息,那么便可以建立一條引用鏈:

Thread->MessageQueue->Message->Handler(BrowserFrame)->Activity

 

 

 

 

好了,樓主的疑惑是什么?

五. ***的疑惑

我們再來看看 AuthDialog 的引用鏈。

 

換成 MAT 看會比較清晰:

 

樓主發(fā)現(xiàn),這里 CookieSyncManager 線程,居然直接引用了 Message 對象!這是什么鬼?一般情況下,HandlerThread 持有一個 MessageQueue 對象,MessageQueue 才持有 Message 隊列。

Java Local : A local variable. For example, input parameters, or locally created objects of methods that are still in the stack of a thread. Native stack.

Input or output parameters in native code, for example user-defined JNI code or JVM internal code. Many methods have native parts, and the objects that are handled as method parameters become garbage collection roots. For example, parameters used for file, network, I/O, or reflection operations.

這里表明,CookieSyncManager 線程中存在某個 Message 的局部變量,而由于線程一直沒有結(jié)束,所以局部變量一直沒有被釋放。而這個 Message.obj 成員引用了 AuthDialog$3 對象。

這是一個內(nèi)部類,樓主發(fā)現(xiàn)內(nèi)部類混淆之后的命名規(guī)則就是:第幾個出現(xiàn)就命名為幾。

AuthDialog 里面有很多內(nèi)部類:

 

 

 

 

如上圖,MAT 中的引用鏈中的 AuthDialog$3 指的就是這里的 OnDismissListener 匿名內(nèi)部類!接著我們來看看 Dialog.setOnDismissListener 里面做了什么勾搭:

 

 

 

納尼!OnDismissListener 居然被賦給了 Message.obj 成員!

于是,我們心中生成的一條引用鏈?zhǔn)沁@樣的:

Thread(main) -> MessageQueue->Message -> obj(OnDismissListener) -> AuthDialog -> Activity

 

 

 

 

可是不對啊,我們所能找到的引用鏈跟 CookieSyncManager 子線程一點關(guān)系都沒有!

再對比一下:

 

 

 

 

子線程 CookieSyncManager 拿到了主線程的 Message!! Oh no !! 這是什么情況???這個 Message 被某處地方錯誤引用了?子線程通過 JNI 在 native 中拿到 Java 層的對象?

好吧,樓主承認(rèn)研究了一個晚上沒有任何進(jìn)展。。。

六. 原來是它!—Dialog

注:以下的分析感悟來自Github上面的一篇文章:《一個內(nèi)存泄漏引發(fā)的血案》

https://github.com/bboyfeiyu/android-tech-frontier/blob/master/issue-25/%E4%B8%80%E4%B8%AA%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F%E5%BC%95%E5%8F%91%E7%9A%84%E8%A1%80%E6%A1%88-Square.md

有興趣的童鞋請☞☞ 復(fù)制鏈接到瀏覽器打開 ☜☜,進(jìn)行詳細(xì)閱讀!

這里簡要說明一下,作者的結(jié)論是:在 Android Lollipop 之前使用 AlertDialog 可能會導(dǎo)致內(nèi)存泄漏!

作者發(fā)現(xiàn),局部變量的生命周期在 Dalvik VM 跟 ART/JVM 中有區(qū)別。在 DVM 中,假如線程死循環(huán)或者阻塞,那么線程棧幀中的局部變量假如沒有被置為 null,那么就不會被回收。

如下代碼使用阻塞隊列說明問題:

 

 

 

 

子線程中調(diào)用 loop()死循環(huán),不停地從阻塞隊列中取出一個 MyMessage 對象并且將對象的引用賦值給局部變量 message,一次 while 循環(huán)之后,虛擬機(jī)應(yīng)當(dāng)結(jié)束 while 花括號中的局部變量的生命周期,并且釋放對應(yīng)的堆內(nèi)存中的 MyMessage 對象。可是,DVM 沒有這么做!!

在 VM 中,每一個棧幀都是本地變量的集合,而垃圾回收器是保守的:只要存在一個存活的引用,就不會回收它。在每次循環(huán)結(jié)束后,本地變量不再可訪問,然而本地變量仍持有對 Message 的引用,interpreter/JIT 理論上應(yīng)該在本地變量不可訪問時將其引用置為 null,然而它們并沒有這樣做,引用仍然存活,而且不會被置為 null,使得它不會被回收!!

這種場景不就是 Android Handler 消息機(jī)制的處理方式么?!

 

 

 

 

Looper 不停地從阻塞隊列 MessageQueue 中取出下一條消息 Message 并將引用賦給本地變量 msg。一旦一次循環(huán)結(jié)束了,msg 沒有被置為 null,對應(yīng)的 Message 對象沒有被回收,于是就泄漏了。

不過,Message 是自帶回收機(jī)制的,而且任何線程共用,從上面源碼可以看到,每個 Message 被 Handler 處理完之后都會 recycle(),置空所有的成員變量,并且放到回收池中。

好了,被 CookieSyncManager 子線程的 Looper 輪過一次的 Message 對象也跟其他人一樣,被回收并放在了回收池中。這個時候,剛好遇到了 Dialog!!

 

 

 

 

這家伙剛剛好通過 obtainMessage()從回收池中拿到了這個 Message(被 CookieSyncManager 線程的本地變量引用住了),而且Message.obj 變量就是 OnDismissListener。

拿到之后,Dialog 居然據(jù)為己有!!作為一個成員寵愛著!

 

Dialog 自從擁有了 mDismissMessage 對象之后就不會讓它掛到消息隊列中了,每次要用都是拷貝一份而已。Message.obtain(mDismissMessage),所以這個 Message 再也不會回到回收池中,直到 Dialog 被銷毀,mDismissMessage 變量也被置為 null 了。

 

但是,這個 Message 依然占據(jù)著堆內(nèi)存,而且被一個“游離”著的子線程局部變量 msg 引用著!!于是有了這條引用鏈:

Thread(CookieSyncManager) -> Message -> AuthDialog$3(OnDismissListener) -> AuthDialog -> Activity

七. 總結(jié)一些注意點

針對 Android4.3 及以下版本,或者使用 DVM 的 Android 版本

  1. 使用 WebView 的時候,需要注意確保調(diào)用 destroy()
  2. 考慮是否使用 applicationContext()來構(gòu)建 WebView 實例
  3. 調(diào)用 Dialog 設(shè)置 OnShowListener、OnDismissListener、OnCancelListener 的時候,注意內(nèi)部類是否泄漏 Activity 對象
  4. 盡量不要自己持有 Message 對象.
責(zé)任編輯:龐桂玉 來源: 騰訊Bugly
相關(guān)推薦

2020-08-19 09:23:10

傳輸網(wǎng)絡(luò)WDM網(wǎng)絡(luò)技術(shù)

2024-06-17 00:04:00

JavaScriptWebRust開發(fā)

2025-06-27 02:11:00

2024-01-05 08:37:41

前端項目開發(fā)

2020-10-19 06:49:18

內(nèi)存String

2015-08-24 10:31:14

Windows 10功能

2020-09-29 06:45:49

JDK

2015-06-18 11:04:58

2020-12-15 08:05:40

路由器服務(wù)器網(wǎng)絡(luò)層

2021-07-28 06:51:08

Nacos代理模式

2024-08-05 01:28:26

2024-09-27 11:38:49

2021-10-18 13:42:52

加密貨幣金融工具

2018-07-06 00:09:47

2023-03-13 08:09:03

Protobuffeature分割

2016-09-25 14:34:10

蘋果谷歌亞馬遜

2021-04-08 22:31:20

編程語言PythonC語言

2020-10-20 17:18:00

戴爾

2021-08-28 10:15:26

項目結(jié)構(gòu)Flask
點贊
收藏

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

女同性恋一区二区| 国产欧美 在线欧美| 熟女少妇一区二区三区| 成人精品一区二区三区电影| 亚洲男同性恋视频| 蜜桃成人在线| 99热这里只有精品在线| 亚洲一卡久久| 欧美成年人网站| 我和岳m愉情xxxⅹ视频| 日韩第一区第二区| 欧美在线小视频| 日韩一级片免费视频| 国产裸舞福利在线视频合集| 国产成人精品影院| 91精品美女在线| 天堂在线免费观看视频| 中文字幕免费一区二区| 在线观看中文字幕亚洲| 免费看毛片的网站| 国产高清亚洲| 欧美少妇性性性| 两根大肉大捧一进一出好爽视频| a黄色片在线观看| 国产精品剧情在线亚洲| 久久av免费一区| 亚洲爱爱综合网| 黑人巨大精品欧美一区| 国产精品777| 亚洲黄色小说图片| 影音先锋久久| 久久91亚洲精品中文字幕| 少妇的滋味中文字幕bd| 在线日韩一区| 日韩高清不卡av| 国产69视频在线观看| 日本高清精品| 91精品国产综合久久久蜜臀粉嫩| 婷婷六月天在线| 朝桐光一区二区| 欧美性生交xxxxx久久久| h无码动漫在线观看| 性欧美高清come| 亚洲男人电影天堂| 免费观看中文字幕| 黄色在线观看网站| 亚洲欧美二区三区| 最新中文字幕久久| av黄色在线| 亚洲乱码中文字幕综合| 国产精品99久久久久久大便| 秋霞午夜在线观看| 成人欧美一区二区三区小说 | 国产又粗又猛又黄又爽无遮挡| 日日摸夜夜添夜夜添国产精品| 欧美在线国产精品| 欧美h在线观看| 男女精品视频| 国产精品久久久久久中文字| 久久精品偷拍视频| 美腿丝袜在线亚洲一区| 成人在线激情视频| www.桃色av嫩草.com| 国产.欧美.日韩| 国内外成人免费视频| 无码精品一区二区三区在线| 91浏览器在线视频| 日韩视频在线观看国产| 亚洲成人三级| 一区二区三区高清不卡| jizzjizz国产精品喷水| 欧美日韩免费观看视频| 欧美精品日韩精品| 麻豆短视频在线观看| 久久久久观看| 一区二区三区日韩在线| 黄视频网站免费看| 亚洲另类视频| 国产精品入口夜色视频大尺度| 国产精品嫩草影院精东| 成人在线视频一区| 日本免费高清一区| 国产精品刘玥久久一区| 午夜av一区二区三区| 欧美丰满熟妇xxxxx| 91精品福利观看| 亚洲国产一区二区三区四区| 国产ts在线播放| 影音先锋成人在线电影| 97久久精品在线| 最好看的日本字幕mv视频大全| 国产专区欧美精品| 精品视频一区二区| 国产精品va在线观看视色| 五月婷婷另类国产| 777一区二区| 任你躁在线精品免费| 色综久久综合桃花网| 日韩成人高清视频| 久久爱另类一区二区小说| 国产精品视频免费观看| 1024视频在线| 午夜国产精品一区| www.色.com| 国产不卡av一区二区| 欧美激情一区二区三区久久久| 国产99免费视频| 成人高清在线视频| 在线视频不卡一区二区三区| 黄色污网站在线观看| 欧美日韩精品免费观看视频| 菠萝菠萝蜜网站| 欧美日韩1区2区3区| 国产精品第8页| 天天干天天色天天| 亚洲乱码国产乱码精品精98午夜 | 亚洲精品高清视频| 狠狠躁少妇一区二区三区| 欧美一卡2卡3卡4卡| 欧美午夜激情影院| 亚洲欧美日韩综合国产aⅴ| 97碰碰视频| 欧美激情午夜| 欧美三级中文字幕在线观看| 亚洲国产精品成人综合久久久| 你懂的一区二区| 国产剧情日韩欧美| 国产黄在线播放| 色噜噜狠狠色综合欧洲selulu| 中文字幕1区2区| 亚洲精品中文字幕乱码| 国产精品丝袜视频| 国产福利小视频在线观看| 狠狠躁夜夜躁人人爽超碰91| 妖精视频一区二区| 国产精品v亚洲精品v日韩精品 | 亚洲妇女屁股眼交7| 国产成年人视频网站| 成人激情诱惑| 国产精品偷伦视频免费观看国产| 精品欧美不卡一区二区在线观看| 都市激情亚洲色图| 一本加勒比波多野结衣| 亚洲久久一区| 久久久久久久久一区| 新版的欧美在线视频| 日韩大片免费观看视频播放 | 欧美日韩在线播放| 色婷婷国产精品免| 久久精品免费看| 一区二区av| gogo大尺度成人免费视频| 久久精品在线视频| 午夜精品久久久久久久91蜜桃| 夜夜精品视频一区二区| 人妻av一区二区| 国产精品久久久久久模特 | 婷婷综合五月| 亚洲xxxxx| 国产丝袜视频在线播放| 亚洲精品久久久久久下一站| 亚洲 欧美 视频| 久久精品亚洲乱码伦伦中文| 欧美伦理片在线看| 91视频久久| 99久久精品久久久久久ai换脸| av有码在线观看| 亚洲视频axxx| 国产又粗又猛又黄又爽无遮挡| 一区二区三区日韩精品| 女尊高h男高潮呻吟| 免费在线欧美视频| 欧美日韩一区二区三区电影| 国产精品白丝一区二区三区| 欧美一级淫片播放口| 日本www在线观看视频| 欧美大黄免费观看| 欧美一区免费看| 中文字幕亚洲成人| 人妻体内射精一区二区三区| 爽好久久久欧美精品| 日本不卡一区二区三区四区| 国产精品45p| 国产精品久久久久久久app| av网站在线看| 亚洲人成五月天| 99久久精品国产一区色| 狠狠色狠狠色综合日日五| 久草福利资源在线| 99久久综合99久久综合网站| 亚洲成人av免费看| 亚洲狠狠婷婷| 夜夜春亚洲嫩草影视日日摸夜夜添夜| baoyu135国产精品免费| 国产精品福利在线观看| 电影k8一区二区三区久久| 国产亚洲欧美日韩一区二区| 精品国产无码一区二区三区| 日本高清视频一区二区| 久久精品99国产精| 国产精品每日更新| 亚洲av无码一区二区三区观看| 久久99精品国产91久久来源| 久久久999免费视频| 影音先锋成人在线电影| 日本最新一区二区三区视频观看| 一区二区三区高清在线观看| 国产精品久久久久久网站| 国产直播在线| 欧美激情精品久久久久久大尺度| 国产精品免费观看| 亚洲精品久久久久久久久久久久久| 97人妻精品一区二区三区动漫| 日韩欧美一区二区在线| 精品视频一区二区在线观看| 中文字幕一区二区三区av| 精品人妻少妇嫩草av无码| 成人精品免费看| 超碰中文字幕在线观看| 奇米四色…亚洲| 人妻有码中文字幕| 亚洲黄色天堂| 国产一区二区四区| 自拍偷拍欧美专区| 午夜在线视频免费观看| 欧美一区电影| 日韩欧美国产二区| 九九热爱视频精品视频| 美乳视频一区二区| 卡通动漫精品一区二区三区| 亚洲一区二区自拍| 久久99成人| 91深夜福利视频| 91视频成人| 91免费精品国偷自产在线| 国产精品久久乐| 国产精品精品视频一区二区三区| 校园春色亚洲| 国产99在线|中文| 欧美日韩五码| 国产精品www网站| 深夜视频一区二区| 国产精品青青在线观看爽香蕉| 性感美女一区二区在线观看| 国产99久久精品一区二区永久免费| jk漫画禁漫成人入口| 欧美做受高潮1| 日韩成人影音| 国产精品美女久久久久av超清| 成人a在线观看高清电影| 国产日韩av在线播放| 亚洲精品777| 亚洲专区在线视频| 99这里只有精品视频| 国产欧美日本在线| 亚洲素人在线| 色综合久久av| 91一区二区三区四区| 午夜久久久久久久久久久| 欧美三级网页| jizzjizz国产精品喷水| 日韩一区欧美二区| 波多野结衣国产精品| 国产成人精品一区二区三区四区| 日本一区二区在线观看视频| 91婷婷韩国欧美一区二区| 精品无码国产污污污免费网站 | 亚洲乱码日产精品bd在线观看| 欧美黄色aaaa| 播放灌醉水嫩大学生国内精品| 日韩av中文字幕一区二区三区 | 国产成人麻豆免费观看| 欧美美女喷水视频| 黄色小视频免费观看| 亚洲色图校园春色| 毛片免费不卡| 午夜剧场成人观在线视频免费观看| 成人短视频app| 国产精品久久久久久久久久久新郎| 亚洲成人a级片| 国模精品娜娜一二三区| 色小子综合网| 欧美视频在线观看视频| 蜜桃一区二区三区在线| 国产一精品一aⅴ一免费| 2020国产精品自拍| 一区二区国产精品精华液| 精品久久久国产| 亚洲一区精品在线观看| 亚洲成色777777在线观看影院| 国产鲁鲁视频在线观看免费| 色中色综合影院手机版在线观看| 国模冰冰炮一区二区| 91在线色戒在线| 综合色就爱涩涩涩综合婷婷| 精品少妇人妻av一区二区| 亚洲激情专区| a在线观看免费视频| 国产成人日日夜夜| www.日本高清视频| 亚洲mv大片欧洲mv大片精品| 一级黄色录像大片| 亚洲精选一区二区| 色帝国亚洲欧美在线| 国产日韩精品在线观看| 香蕉久久精品| 真实国产乱子伦对白视频| 久久精品国产99国产| 黄色片视频免费观看| 亚洲综合激情小说| 一级黄色免费片| 一区二区三区日韩在线| 欲香欲色天天天综合和网| 粉嫩高清一区二区三区精品视频| 久久社区一区| 能在线观看的av网站| 91污在线观看| 激情五月色婷婷| 日韩三级视频中文字幕| 欧美成人性生活视频| 国产精品va在线| 亚洲动漫在线观看| 国产xxxx振车| 国产精品一区免费在线观看| 国产亚洲精品久久久久久豆腐| 色网综合在线观看| 日本福利在线观看| 97色在线观看| 欧美性生活一级片| 国产v片免费观看| 成人免费三级在线| 久久精品女人毛片国产| 日韩三级视频中文字幕| 粗大黑人巨茎大战欧美成人| 国产欧美一区二区三区在线| 欧美日韩黑人| 日日噜噜噜噜久久久精品毛片| 久久久国际精品| 国产中文字幕视频| 亚洲片av在线| 欧洲一区二区三区精品| 日韩区国产区| 蜜臀99久久精品久久久久久软件| 99精品全国免费观看| 欧美日韩的一区二区| 免费观看在线黄色网| 亚洲最大激情中文字幕| 在线成人超碰| 色诱av手机版| 亚洲成人免费观看| 亚洲人妻一区二区三区| 日本精品久久中文字幕佐佐木| 亚洲成人一品| 日本激情视频在线播放| 国产精品久久久久aaaa樱花 | 黄色片视频网站| 日韩激情第一页| 成人在线黄色| www.黄色网址.com| 成人看片黄a免费看在线| 中文字幕亚洲高清| 国产亚洲xxx| **精品中文字幕一区二区三区| 波多野结衣与黑人| 99精品久久99久久久久| 免费视频久久久| xvideos亚洲| 成人看片黄a免费看视频| www.浪潮av.com| 国产精品理伦片| 亚洲欧美另类日韩| 国产精品91久久久久久| 亚洲成人一区| 亚洲精品在线视频免费观看| 在线日韩av片| 中文字幕有码在线观看| 久久99久久99精品蜜柚传媒| 毛片av一区二区| 久久久久久福利| 亚洲天堂影视av| 精品午夜视频| 麻豆av免费在线| 亚洲精品网站在线观看| 日韩电影免费| 成人性生交xxxxx网站| 亚洲国产一区二区三区高清| 夜夜春很很躁夜夜躁| 欧美一区二区三区免费大片 | 四虎成人免费影院| 日韩精品在线看片z| 二区三区不卡| 黄色成人在线免费观看| 久久精品视频免费观看| 国产999久久久| 国产99久久久欧美黑人| 欧美日韩一区二区高清| 亚洲色图第四色| 亚洲激情在线视频| 精品国产三区在线| 熟女人妇 成熟妇女系列视频|