国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Android 12原生系統(tǒng)居然有內(nèi)存泄露隱患?

共 10254字,需瀏覽 21分鐘

 ·

2022-07-12 00:43

 安卓進(jìn)階漲薪訓(xùn)練營,讓一部分人先進(jìn)大廠


大家好,我是皇叔,最近開了一個安卓進(jìn)階漲薪訓(xùn)練營,可以幫助大家突破技術(shù)&職場瓶頸,從而度過難關(guān),進(jìn)入心儀的公司。


詳情見文章:沒錯!皇叔開了個訓(xùn)練營


作者:努比亞技術(shù)團(tuán)隊
https://www.jianshu.com/p/b0de542204f8

一、引言



Android里面內(nèi)存泄漏問題最突出的就是Activity的泄漏,而泄漏的根源大多在于因為生命周期較長的對象去引用生命周期較短的Activity實例,也就會造成在Activity生命周期結(jié)束后,還被引用導(dǎo)致無法被系統(tǒng)回收釋放。

Activity導(dǎo)致內(nèi)存泄漏有兩種情況:

  1. 應(yīng)用級:應(yīng)用程序代碼實現(xiàn)的activity沒有很好的管理其生命周期,導(dǎo)致Activity退出后仍然被引用。

  2. 系統(tǒng)級:Android系統(tǒng)級實現(xiàn)的對activity管理不太友好,被應(yīng)用調(diào)用導(dǎo)致內(nèi)存泄漏。

本文主要講的是最近發(fā)現(xiàn)的系統(tǒng)級shouldShowRequestPermissionRationale方法使用導(dǎo)致的內(nèi)存泄漏問題。

二、背景

Android 6.0 (API 23) 之前應(yīng)用的權(quán)限在安裝時全部授予,運行時應(yīng)用不再需要詢問用戶。在 Android 6.0 或更高版本對權(quán)限進(jìn)行了分類,對某些涉及到用戶隱私的權(quán)限可在運行時根據(jù)用戶的需要動態(tài)獲取。主要流程如下:

權(quán)限申請流程

這個過程中會遇到這么幾個方法:

  • ContextCompat.checkSelfPermission,檢查應(yīng)用是否有權(quán)限

  • ActivityCompat.requestPermissions,請求某個或某幾個權(quán)限

  • onRequestPermissionsResult,請求權(quán)限之后的授權(quán)結(jié)果回調(diào)

  • shouldShowRequestPermissionRationale


前三個方法的用途都非常清楚,使用也很簡單,這里不做過多解釋,今天主要看下shouldShowRequestPermissionRationale,看下它是干什么用的:

當(dāng)APP調(diào)用一個需要權(quán)限的函數(shù)時,如果用戶拒絕某個授權(quán),下一次彈框時將會有一個“禁止后不再詢問”的選項,來防止APP以后繼續(xù)請求授權(quán)。如果這個選項在拒絕授權(quán)前被用戶勾選了,下次為這個權(quán)限請求requestPermissions時,對話框就不彈出來了,結(jié)果就是app啥都不干。遇到這種情況需要在請求requestPermissions前,檢查是否需要展示請求權(quán)限的提示,這時候用的就是shouldShowRequestPermissionRationale方法。


shouldShowRequestPermissionRationale字面解釋是“應(yīng)不應(yīng)該解釋下請求這個權(quán)限的目的”,下面列舉了此方法使用時的4種情況及相應(yīng)情況下的返回值:

  1. 都沒有請求過這個權(quán)限,用戶不一定會拒絕你,所以你不用解釋,故返回false;

  2. 請求了但是被用戶拒絕了,此時返回true,意思是你該向用戶好好解釋下了;

  3. 用戶選擇了拒絕并且不再提示,也不給你彈窗提醒了,所以你也不用解釋了,故返回fasle;

  4. 已經(jīng)允許了,不需要申請也不需要提示,故返回false。

三、調(diào)用案例及內(nèi)存泄漏隱患

3.1正常權(quán)限申請流程

通常我們申請權(quán)限時先調(diào)用checkSelfPermission方法檢驗應(yīng)用是否有需要使用的權(quán)限,沒有相應(yīng)權(quán)限時調(diào)用shouldShowRequestPermissionRationale方法檢查是否需要展示請求權(quán)限的提示。不需要展示提示時再調(diào)用requestPermissions方法進(jìn)行權(quán)限請求。代碼如下:


3.2內(nèi)存泄漏隱患發(fā)現(xiàn)

在Android S上,我們使用上述方式進(jìn)行權(quán)限獲取時會發(fā)現(xiàn)只要你調(diào)用了shouldShowRequestPermissionRationale方法,當(dāng)MainActivity生命周期結(jié)束后MainActivity都不會被回收。我們可以不給予所需權(quán)限多次進(jìn)入退出此應(yīng)用運行一段時間(保證每次都會調(diào)用到shouldShowRequestPermissionRationale方法)。使用adb命令dump meminfo查看內(nèi)存情況。可以看到activity實例數(shù)為25,表明acticity雖然被銷毀但是因為被其他對象持有所以并沒有被GC。注意:此處測試是通過返回鍵退出activity的,我們的Demo在返回鍵的監(jiān)聽有調(diào)用finish方法確保結(jié)束activity。每次重新進(jìn)入都會重新執(zhí)行onCreate方法。因為Android S上使用返回鍵退出應(yīng)用并不會直接銷毀activity,而只有當(dāng)應(yīng)用主動調(diào)用finish或者非啟動類型的activity才會去銷毀。

Demo內(nèi)存占用情況


此時我們已經(jīng)發(fā)現(xiàn)此Demo存在明顯的內(nèi)存泄露問題。下面我們使用Memory Profiler工具抓取hprof文件進(jìn)行內(nèi)存分析,看看是哪里發(fā)生了內(nèi)存泄漏。

使用Memory Profiler工具進(jìn)行內(nèi)存泄漏分析

  1. 可以看到Memory Profiler工具已經(jīng)提示我們有com.nubia.application包下MainActivity有24個對象發(fā)生了內(nèi)存泄露。

  2. 可以看到當(dāng)前MainActivity總共實例有25個和adb命令查詢出來吻合。其他24個實例沒有被GC導(dǎo)致內(nèi)存泄露。

  3. References標(biāo)簽頁可以看到其他MainActivity實例被AppOpsManager持有導(dǎo)致無法被GC。



  4. 我們可以看到Memory Profiler工具提示共有48個對象產(chǎn)生內(nèi)存泄露那么其他24個是哪里產(chǎn)生的呢?點擊Leaks進(jìn)行查看如下圖。

    使用Memory Profiler工具進(jìn)行內(nèi)存泄漏分析

  5. 可以看到除了MainActivity產(chǎn)生了內(nèi)存泄露,ReportFragment也產(chǎn)生了內(nèi)存泄露。查看ReportFragment的Instance Details標(biāo)簽頁可以看到ReportFragment的實例被MainActivity持有而MainActivity被AppOpsManager持有所以產(chǎn)生了內(nèi)存泄露。

  6. 至此Demo中所有內(nèi)存泄露問題分析完成。


3.3內(nèi)存泄漏隱患分析

在上一節(jié)中我們已經(jīng)發(fā)現(xiàn)Demo在使用過程中存在內(nèi)存泄漏問題。只要我們調(diào)用shouldShowRequestPermissionRationale方法,當(dāng)Activity生命周期結(jié)束時就會發(fā)生Activity內(nèi)存泄漏。那么這一節(jié)我們來具體分析下為什么調(diào)用shouldShowRequestPermissionRationale方法會發(fā)生內(nèi)存泄漏。


我們先來看一下shouldShowRequestPermissionRationale方法調(diào)用整個過程的時序圖:

shouldShowRequestPermissionRationale方法調(diào)用時序圖

看完調(diào)用流程圖后,我們再來一步一步分析shouldShowRequestPermissionRationale具體是怎么調(diào)用的,以及為什么會產(chǎn)生內(nèi)存泄漏?

先從Activity的shouldShowRequestPermissionRationale方法開始,Activity調(diào)用的是packageManager的shouldShowRequestPermissionRationale方法。

public boolean shouldShowRequestPermissionRationale(@NonNull String permission) {    //調(diào)用ContextImpl的getPackageManager()方法獲取PackageManager實例    //然后調(diào)用PackageManager的shouldShowRequestPermissionRationale方法    return getPackageManager().shouldShowRequestPermissionRationale(permission);}

我們知道Activity是從ContextWrapper繼承而來的,ContextWrapper中持有一個mBase實例,這個實例指向一個contextImpl對象,Activity的getPackageManager這個方法調(diào)用的就是contextImpl的getPackageManager方法。

private PackageManager mPackageManager;...public PackageManager getPackageManager() {    if (mPackageManager != null) {        return mPackageManager;    }    //獲取PackageManagerService代理對象    final IPackageManager pm = ActivityThread.getPackageManager();    if (pm != null) {        // Doesn't matter if we make more than one instance.        //創(chuàng)建ApplicationPackageManager實例,傳入contextImpl對象        return (mPackageManager = new ApplicationPackageManager(this, pm));    }    return null;}

可以看到contextImpl的getPackageManager方法中會創(chuàng)建ApplicationPackageManager實例同時傳入contextImpl對象,然后調(diào)用ApplicationPackageManager的shouldShowRequestPermissionRationale方法。

private PermissionManager mPermissionManager;protected ApplicationPackageManager(ContextImpl context, IPackageManager pm) {    //傳入的contextImpl和pm實例     mContext = context;    mPM = pm;}private PermissionManager getPermissionManager() {    synchronized (mLock) {        if (mPermissionManager == null) {            //獲取PermissionManager對象            //contextImpl.getSystemService實現(xiàn)            mPermissionManager = mContext.getSystemService(PermissionManager.class);        }        return mPermissionManager;    }}public boolean shouldShowRequestPermissionRationale(String permName) {    //調(diào)用PermissionManager的shouldShowRequestPermissionRationale方法    return getPermissionManager().shouldShowRequestPermissionRationale(permName);}

ApplicationPackageManager中調(diào)用的是PermissionManager的shouldShowRequestPermissionRationale方法。獲取PermissionManager時會調(diào)用contextImpl的getSystemService方法。getSystemService方法調(diào)用由SystemServiceRegistry來完成。

public final @Nullable <T> T getSystemService(@NonNull Class<T> serviceClass) {    String serviceName = getSystemServiceName(serviceClass);    return serviceName != null ? (T)getSystemService(serviceName) : null;}public String getSystemServiceName(Class<?> serviceClass) {    //通過class對象獲取服務(wù)名    return SystemServiceRegistry.getSystemServiceName(serviceClass);}public Object getSystemService(String name) {    //通過服務(wù)名獲取服務(wù),傳入contextImpl實例對象    return SystemServiceRegistry.getSystemService(this, name);}

SystemServiceRegistry提供PermissionManager的實例。SystemServiceRegistry在靜態(tài)注冊PermissionManager會傳入contextImpl的outerContext對象,這個outerContext就是Activity對象。

public static Object getSystemService(ContextImpl ctx, String name) {    if (name == null) {        return null;    }    //通過服務(wù)名獲取對應(yīng)服務(wù)    final ServiceFetcher<?> fetcher = SYSTEM_SERVICE_FETCHERS.get(name);    ...    //返回對應(yīng)服務(wù)    final Object ret = fetcher.getService(ctx);    ...    return ret;}static{    //靜態(tài)注冊PermissionManager    registerService(Context.PERMISSION_SERVICE, PermissionManager.class,                    new CachedServiceFetcher<PermissionManager>() {                        @Override                        public PermissionManager createService(ContextImpl ctx)                            throws ServiceNotFoundException {                            //創(chuàng)建PermissionManager實例 傳入activity實例對象                            return new PermissionManager(ctx.getOuterContext());                        }});}

精彩的部分來了,在PermissionManager的構(gòu)造方法中會創(chuàng)建PermissionUsageHelper對象并傳入context,這個context是SystemServiceRegistry中contextImpl對象持有的outerContext對象,就是一開始的Activity對象,所以PermissionUsageHelper的單實例持有了Activity的實例引用。


看到這里再結(jié)合上節(jié)的內(nèi)存泄漏隱患發(fā)現(xiàn)時hprof文件中的GC Root我們可以知道,內(nèi)存泄漏就是這個PermissionUsageHelper構(gòu)造時持有Activity對象最終在Acitvity生命周期結(jié)束時沒有被釋放導(dǎo)致的。

public PermissionManager(@NonNull Context context) throws ServiceManager.ServiceNotFoundException {    mContext = context;    mPackageManager = AppGlobals.getPackageManager();    //獲取PermissionManagerService代理對象    mPermissionManager = IPermissionManager.Stub.asInterface(ServiceManager.getServiceOrThrow("permissionmgr"));    mLegacyPermissionManager = context.getSystemService(LegacyPermissionManager.class);    //TODO ntmyren: there should be a way to only enable the watcher when requested    //Android S新增,初始化 PermissionUsageHelper 引發(fā)內(nèi)存泄漏問題    mUsageHelper = new PermissionUsageHelper(context);}

我們再來看PermissionManager中的shouldShowRequestPermissionRationale方法,最終調(diào)用的是PermissionManagerService代理對象的shouldShowRequestPermissionRationale方法。


到這里我們基本走完了shouldShowRequestPermissionRationale方法的調(diào)用流程。也知道調(diào)用shouldShowRequestPermissionRationale方法產(chǎn)生的內(nèi)存泄漏是因為在獲取PermissionManager時創(chuàng)建PermissionUsageHelper導(dǎo)致的。這個問題僅在Android S上出現(xiàn),在Android_R上PermissionManager構(gòu)造方法并沒有去創(chuàng)建PermissionUsageHelper所以也不會有內(nèi)存泄露問題。下面我們再來看為什么創(chuàng)建PermissionUsageHelper時傳入Activity對象會導(dǎo)致內(nèi)存泄漏?Activity又是被誰一直持有的?

public boolean shouldShowRequestPermissionRationale(@NonNull String permissionName) {    try {        final String packageName = mContext.getPackageName();        //調(diào)用PermissionManagerService的shouldShowRequestPermissionRationale方法        return mPermissionManager.shouldShowRequestPermissionRationale(packageName, permissionName, mContext.getUserId());    } catch (RemoteException e) {        throw e.rethrowFromSystemServer();    }}

在PermissionUsageHelper構(gòu)造方法中會把Activity對象賦值給mContext這個成員變量,然后獲取AppOpsManager對象,并調(diào)用AppOpsManager的startWatchingActive和startWatchingStarted方法傳入this作為回調(diào)用來監(jiān)聽?wèi)?yīng)用程序狀態(tài)和權(quán)限狀態(tài)監(jiān)聽。


這里的startWatchingActive和startWatchingStarted方法最終會調(diào)用AppOpsService的startWatchingActive和startWatchingStarted方法并把傳入的this也就是PermissionUsageHelper保存起來。而PermissionUsageHelper又持有Activivty實例,導(dǎo)致AppOpsService間接保存Acitivty實例。當(dāng)應(yīng)用程序主動調(diào)用destroy方法時,AppOpsService并沒有移除應(yīng)用監(jiān)聽和權(quán)限狀態(tài)監(jiān)聽,仍然保存著Acitivty實例導(dǎo)致Acitivty無法釋放產(chǎn)生內(nèi)存泄漏。

public PermissionUsageHelper(@NonNull Context context) {    //Activity上下文對象    mContext = context;    mPkgManager = context.getPackageManager();    //獲取AppOpsManager    mAppOpsManager = context.getSystemService(AppOpsManager.class);    mUserContexts = new ArrayMap<>();    mUserContexts.put(Process.myUserHandle(), mContext);    // TODO ntmyren: make this listen for flag enable/disable changes    String[] opStrs = { OPSTR_CAMERA, OPSTR_RECORD_AUDIO };    // 監(jiān)聽?wèi)?yīng)用程序狀態(tài),此處this實現(xiàn)了OnOpActiveChangedListener接口作為callbackck傳入    mAppOpsManager.startWatchingActive(opStrs, context.getMainExecutor(), this);    int[] ops = { OP_CAMERA, OP_RECORD_AUDIO };    // 監(jiān)聽權(quán)限狀態(tài),此處this實現(xiàn)了OnOpStartedListener接口作為callbackck傳入    mAppOpsManager.startWatchingStarted(ops, this);}

四、總結(jié)

Android S上增加權(quán)限指示器功能PermissionUsageHelper,這個類它獲取所有使用過麥克風(fēng)、相機(jī)和可能的位置許可的應(yīng)用程序,在特定的時間范圍內(nèi),以及可能的特殊屬性,監(jiān)聽?wèi)?yīng)用程序使用此類權(quán)限的狀態(tài)。調(diào)用shouldShowRequestPermissionRationale方法產(chǎn)生內(nèi)存泄露的根本原因是獲取PermissionManager時會創(chuàng)建PermissionUsageHelper對象并監(jiān)聽?wèi)?yīng)用程序狀態(tài)和權(quán)限狀態(tài)。


只有應(yīng)用進(jìn)程退出或者手機(jī)進(jìn)入IDLE狀態(tài),才釋放activity并且未使用camera、audio和location權(quán)限的應(yīng)用同樣會去做監(jiān)聽,在Android S上重構(gòu)權(quán)限模塊明顯導(dǎo)致了activity泄漏問題。不主動finish應(yīng)用的actiivity雖然不會導(dǎo)致這個問題,但是應(yīng)用場景使用情況很多,從框架原生代碼邏輯來說是不合理的。


這個問題目前僅在Android S上出現(xiàn),其他會使用PermissionManager的場景沒認(rèn)真研究,不確定有沒有這個問題。不過為了避免類似的情況發(fā)生,最好的解決辦法就是:


對PermissionUsageHelper進(jìn)行修改,判斷應(yīng)用是否有camera、location、audio權(quán)限,應(yīng)用程序activity退出時,主動調(diào)用stop方法,移除監(jiān)聽。







為了防止失聯(lián),歡迎關(guān)注我防備的小號



 

                                       微信改了推送機(jī)制,真愛請星標(biāo)本公號??

瀏覽 46
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 人人香蕉| 骚逼影院| 五月天婷婷av| 中文字幕有码在线看| 骚逼国产| 在线免费观看国产| 国产视频久久久| 777免费视频| 高清无码专区| 亚洲精品高清视频| 久色入口| 懂色AV| 人妻精品一区二区在线| www.大鸡巴| av先锋资源| 久久久91精品国产一区苍井空| 色视频国产| 91人人妻人人澡人人爽人人精品 | 超碰99在线观看| av片在线观看| 操逼电影网站| av婷婷五月天| 亚洲精品乱码久久久久久久| 精品成人av| 成人777777| 国产香蕉视频免费| 抽插视频欧美| 天天肏| 中文字幕在线免费视频| 俺去啦在线| 亚洲日韩一级片| 国产又爽又黄免费网站在线| 2021天天操| 北条麻妃一区二区三区在线播放| 久久久国产精品在线| 久热网站| 岛国免费视频| 亚洲精品日日夜夜| 久月婷婷| 日日视频| 五月婷婷啪| 免费的一级A片| 亚洲无码AV麻豆| 青误乐在线播放| 91在线无码精品秘国产三年 | 无码精品一区二区三区在线播放| 四虎影院人妻| 4444操| 亚洲综合激情五月久久| 久久三级| 麻豆回家视频区一区二| 免费v片| 高清无码在线看| 壹屌探花| 免费在线观看黄色视频网站| 天堂免费视频| 99啪啪| 日本免费黄色电影| 亚洲综合电影| 91丨九色丨熟女老版| 影音先锋成人av| 亭亭五月丁香| 最近中文字幕免费MV第一季歌词怀孕 | 国产一级二级三级久久久| 伊人网在线| 丁香视频在线观看| 四川少妇bbb| 日本一区二区视频在线观看 | 亚洲欲色| 91丨九色丨熟女泻火| 一区二区无码av| 国产女人在线视频| 91九色TS另类国产人妖| 一本色道久久无码人妻精品69 | 狼人社區91國產精品| 悠悠无码一区日韩妇女| 激情AV在线观看| 91激情在线| 国产熟女一区二区久久| 在线观看高清无码中文字幕| 国产精品乱草| 国产成人a亚洲精品www| 天天搞天天色| 国内一级黄片| 午夜成人国产| 国内精品人妻无码久久久影院蜜桃| 人妻丰满熟妇| 在线免费看A| 韩国一区二区在线观看| 蜜臀久久99精品久久| AAA精品| 7x7x7x人成免费观学生视频| 女人18片毛片90分钟免费明星| 美国无码| 波多野结衣无码在线视频| 人人摸人人操人人射| 日韩成年视频| 九九精品视频在线观看| AV片在线免费观看| 久久久成人视频| 91在线导航| 五月丁香欧美| 亚洲色图欧美| 黄色视频在线观看亚洲一区二区三区免费 | 三级片日韩| 黄片天堂| 人妻大屁股-91Porn| 岛国无码在线观看| 国产精品久久久久永久免费看| 爱搞逼综合网| 国产黄色大片| 91网站免费| 大地影视官网第三页入口| 青草大香蕉| 深爱激情综合| 一级视频免费观看| 黄色av网站免费| 手机在线操B视频| 草逼动态图| 成人A片免费观看| 欧美黄色免费网站| 亚洲一区AV| 成人无码免费| 丁香五月激情婷婷| 色秘乱码一区二区三区| 男人的天堂av网站| AV大全在线免费观看| 最新亚洲无码在线观看| 国产A片电影| 天天干天天干天| 久久久人妻熟妇精品无码蜜桃| 久久婷婷亚洲| 无码A区| 99re视频在线| 伊人网在线视频| AV草逼| 免费毛片观看| 久草视频在线免费看| 2014av天堂网| 97大香蕉视频| 国产视频你懂的| 香蕉综合网| 国产性爱精品影片免费看| 日韩一区二区三免费高清在线观看| 午夜伦理福利| 中文人妻无码| 无码水蜜桃一区二区| 杨贵妃一级婬片90分钟| 操少妇| 青草久久久| 999reav| 一级黄A片| 国内自拍欧美| 国产精品码一本A片| 男人在线天堂| 久久亚洲AV| 欧美日韩国产在线观看| 蜜臀av一区二区三区| 操逼地址| 久久午夜无码鲁丝片主演是谁 | 日韩精品成人片| 少妇高潮喷水| 国产精品一区二区三| 亚洲欧美色图| 国产精品无码一区二区三| 欧美性爱A片| 国产一级a一片成人AV| 91精品电影| 玖玖色综合| 91青青草| 国产精品探花熟女| 亚洲成人无码视频在线观看| 精品欧美一区二区三区久久久| 影音AV| 亚洲天堂影院| 嫩BBB槡BBBB槡BBB小号| 草草影院第一页YYCCC| 欧美一级欧美三级在线观看| 久久骚| 透逼视频| 日韩无码精品AV| 人人操狠狠操| 日韩一片| 欧美成人一级A片| 91成人免费视频| 77q视频| wwwxx国产| 午夜69成人做爱视频网站| 天天日夜夜艹| 欧美日韩国产在线| 国产伦子伦一级A片免费看老牛| 无码熟妇人妻无码AV在线天堂| 亚洲精品suv视频| 成人av一区| 日韩一级片在线观看| 亚洲无码免费视频在线观看 | 久久狠| 亚洲码AV波多野| 国产九九九九九九| 国产精品一区二区性色AV| 日本不卡在线| 大地资源第三页在线观看免费播放最新 | a级毛片在线观看| 欧美一级A| 俺去搞| 高清无码直接看| av777777| 色香蕉视频| 亚洲无码一级电影| 成人欧美一区二区三区在线观看| 国产中文在线视频| 日韩欧美在线免费观看| 久在线| 久久久久久久久久久久久自慰小片| 亚洲砖区免费| 红桃视频无码| 西西444WWW大胆无视频软件亮点| 成人免费区一区二区三区| 亚洲精品无码更新| 国产精品VA| 爱爱视频免费看| 日本麻豆| 丁香五月婷婷中文字幕| 狠狠视频| 天天躁狠狠躁夜躁2024| 国产成人精品a视频一区| 日韩成人精品在线| 黄色大片在线免费观看| 少妇熟女视频一区二区三区| 日韩人妻无码电影| 成人做爰黄AAA片免费直播岛国 | 色婷婷精品国产一区二区三区| 精品国产精品国产精品国产网站| 无码欧美成人AAAA三区在线| 欧美综合在线观看| 三级一区二区| 日本人妻在线观看| 成人三级视频在线观看| 久操播放器| 超碰人人人人人人人人| 欧美激情另类| 成人在线免费观看视频| 免费v在线观看| 色婷婷中文| 婷婷五月激情网| 翔田千里在线一区二区三区| 久久婷婷国产综合| 中文字幕亚洲在线观看| 国产欧美在线观看不卡| 久久蜜桃视频| 亚洲精品视频无码| 亚洲国产av电影| 天天日狠狠操| 91人人澡人人爽人人看| 中文字幕天天在线| 99Re66精品免费视频| 免费的av| 亚洲操操操操| 欧美一级精品| 国内毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 成人av无码| 波多野结衣av在线观看窜天猴| 黄色无码在线观看| 一本一道久久| 黄色A片网| 91超碰大香蕉| 波多野结衣黄色视频| 色老板av| 九色自拍视频| 浪潮在线观看完整版| 免费无码婬片aaaa| 老鸭窝在线观看视频| 99re6热在线精品视频功能| 国内不卡一卡二视频| 午夜操逼视频| 1024手机在线视频| 五月天婷婷激情网| 另类老妇奶性生BBwBB| 日韩AV自拍| 午夜无码精品一区二区三区99午| 久草黄色电影| 精品无码一区二区Av蜜桃| 国产一区不卡| 一级片在线免费看| 国产成人va| 蜜臀AV一区二区三区免费看| 成人电影综合网| 青青草原AV| 欧美性爱第四页| 亚洲图片在线观看| 中文字幕在线看成人电影| 午夜日逼网站| 午夜日韩| 特级西西444www大胆高清图片| 亚洲精品熟女| 成人禁区| 色婷婷国产精品综合在线观看| 国内特级毛片| 亚洲中字幕| 大鸡吧在线视频| 国产精品成人3p一区二区三区| 国产视频一区二区在线观看 | 国产精品秘久久久久久1-~/\v7-/ 囯产精品一区二区三区线一牛影视1 | 午夜尤物| 老司机AV| 人人操人人爱人人摸| 日本高清无码在线| 性A免费在线播放| 12—13女人毛片毛片| 一夲道无码专区av无码A片| 人妻国产| 自拍偷拍在线视频| 91久久久久久久久| 美女日屄| 东京热无码高清| 国产精品久久久久久久久久久久久 | 性爱xxxxx| 日韩欧美分区视频| 91要爱爱| 亚洲成人大香蕉| 国产精品18进进出出17c| 2021国产视频| www久久| 国产精品天天| 国产成人一区二区| 国产色悠悠| 91偷拍视频| 亚洲女同在线| 大香蕉日逼| 国产又粗又长又硬又大毛苴茸图片| 大香蕉在线伊| jizz免费视频| 久久久亚洲无码精品| 老司机无码| 亚洲va欧洲va国产va不卡| 亚洲污网| 久久久久久婷婷| 美少妇AV| 波多野结衣亚洲视频| 久久午夜无码鲁丝片午夜精品偷窥| 99久热在线精品视频| 91精东传媒果冻传媒| 天天拍天天射| 69视频在线观看| 日韩无码AV一区二区三区| 韩国毛片| 亚洲天堂无码AV| 99在线精品视频| 91成人网站| 黄片视频免费看| 国产三级片无码| 深爱激情五月天| 欧美A在线观看| 亚洲欧美大香蕉视频网| 日本欧美在线播放中文| 蕉蕉视| 色天使AV| 91色视频在线观看| 国内精品卡一卡二卡三| av天天av无码av天天爽| 超碰在线国产| 青娱乐A片| 少妇嫩搡BBBB搡BBBB| 日韩综合精品| 东京热这里只有精品| 91久久久久久久久久久久18| 鸡巴网站| 国产九九九九九九| 中国老太卖婬HD播放| AV在线一区二区三区| 免费做爱视频网站| 午夜久久久久久久久久久久91 | 国产乱婬片视频| 内射视频免费观看| 91一区二区在线播放精品| 亚洲AV毛片| 免费在线观看内射| 一级A片在线观看| 大香蕉免费网| 亚洲AVwww| 精品欧美一区二区三区久久久| 可以看的三级网站| 四虎高清无码| av网站导航| 日韩成人无码AV| 亚洲欧美天堂| 乳揉みま痴汉电车羽月希免费观看| 澳门四虎影院| 性满足BBwBBWBBw| 97成人在线| 日韩精品无码一区二区三区| 爱搞视频在线观看| 自拍偷拍影音先锋| 精产国品一区二区| 免费在线A| 男人的天堂视频在线| 国产精品一二三区| 在线观看免费视频黄| 丝袜美女足交| 你懂的在线网站| 亚洲秘无码一区二区| 日本乱伦视频| 91亚洲精品视频在线| 欧美黄色大香蕉| 97大香蕉视频| 久久久久久久久久久久成人| 久久久久久久国产精品| 天天操夜夜爱| 人妻少妇91精品一区黑人| 91在线无精精品秘白丝| 无码人妻精品一区二区蜜桃网站| 五月丁香综合网| 五月天婷婷激情视频| 先锋影音资源站av每日资源在线| 日韩小视频在线观看| 天天日AV| jizz亚洲| 日本少妇BBW| 特级爱爱视频| 日本一级婬片A片AAA毛多多| 亚洲码无人客一区二区三区| 特级西西444WWW高清大视频| 伊人久久大香线蕉av一区| 国产人妻一区二区精选| 激情性爱婷婷色五月| 国产四区| 五月激情婷婷网| 亚洲综合伊人| 东京热三区| 三级无码高清| 日逼网址| 欧美久久精品| 国产探花一区二区三区| 色交视频| 日韩家庭乱伦| 黄色视频免费观看国产| 久久大香蕉视频| Av一区二区三区| 91久久人澡人妻人人澡人人爽| 青春草在线视频| 国产高清色| 在线观看免费a片| 成人无码视频| 躁BBB躁BBB躁BBBBB乃| 波多野结衣视频无码| 欧洲三级片| 欧美黄片免费在线观看| 精品免费一区二区三区四区| 日韩中文字幕在线| aaa免费视频| 肏逼免费视频| 人人做人人爽| 黄色一级片视频| 国产一级片电影| 夜夜爽夜夜高潮夜夜爽| 操毛| 午夜福利视频91| 国产成人69免费看| 激情99| 丰满岳乱妇一区二区三区| 中文字幕精品1| 免费中文字幕| 猫咪AV成人永久网站| 日韩精品视频一区二区三区| 另类视频区| 欧美A片在线观看| 91在线成人| 久久国产精品电影| 风情万种AV| 奇米色色色| 国产农村妇女精品一二区| 久久五月天视频| 欧美在线播放| 中文字幕一区二区三区四区五区六区| 国产免费久久久| 日韩黄在线| 亚洲一区中文字幕| 91精品在线免费观看| 18性XXXXX性猛交| 九九免费视频| 在线色片| 在线观看黄A片免费网站| 日韩18在线| 天天操夜夜操| 国产毛片基地| 91中文字幕在线播放| 人人澡av| 手机在线小视频| 91做爱| 三级片高清无码| 国产黄色片在线免费观看| 亚洲免费清高| 足浴店少妇69XXX| 无码福利导航| 在线观看免费视频a| 综合天堂网| 国产1区2区| 特级西西444www精品视频| 亚洲高清无码视频大全| 青青娱乐亚洲无| 足浴小少妇-88AX| 2025国产成人精品一区| 伊大香蕉| 18禁成人A∨片| 日韩一级| 91在线小视频| 亚洲专区在线播放| 久久久久久9| 久久久久久一区| 午夜黄色视频| 亚洲成人日韩| 久久草在线播放| 少妇做爱特级AAA| 日操操| 18国产免费视频| 免费在线观看a| 成人午夜在线观看| 一区免费在线观看| 欧美人人插| 91无码人妻| 久久天天操| 人人爽久久涩噜噜噜网站| 午夜美女福利视频| 学生妹作爱片| 亚洲成人影片| 国产资源av| 免费无码在线| 亚洲GV成人无码久久精品| 爽爽午国产浪潮AV性色www| 亚洲欧美美国产| 国产AV一级| 国产精品18禁| 秋霞无码| 欧美成人手机在线观看| 少妇熟女视频一区二区三区| 久草福利| 国产亚洲欧美在线| 成人视频在线观看黄色18| 在线观看老湿视频福利| 手机av网站| 欧美日韩一级在线观看| 影音先锋资源| 大香蕉精品视频在线| 91蜜桃精品| 一级a免一级a做免费线看内祥 | 日韩国产免费| 在线中出| 亚洲蜜桃av一区| 久久久黄色| 亚洲无码视频一区| 天天日天天拍| 天天天天天天天干| 国产在线观看你懂的| 欧美爱爱免费看| 黑吊操| 日韩欧美在线播放| 四虎黄色网| 国产主播在线播放| 撸一撸AV| 欧美日韩一道本| 精品无码不卡| 日韩和的一区二区| 欧美一在线一综合| 在线免费观看黄色| 久久无码一区二区三区| 欧美综合精品| 亚洲男人天堂AV| 日韩中文字幕在线人成网站| 亚洲五月天色| 乱伦91视频| 日韩激情无码视频精选| 欧美日逼| 嫩BBB槡BBBB槡BBB| 淫香淫色综合网| 夜夜夜影院| 强伦轩人妻一区二区三区四区| 成人免费在线网站| 鲁一鲁在线视频| 91ThePorn国产| 老司机福利在线视频| 高清无码色播| 国产精品一二三| 日本一区二区三区免费视频| 亚洲福利视频网| 日韩一区二区在线视频| 免费做a爰片77777| 欧美啪啪网站| 四房五月婷婷| 欧美一级三级| 日本精品视频在线| 亚洲精品鲁一鲁一区二区三区 | 久久久精品影院| 在线看片a| 东京热综合网| 天天日天天干天天日| 国精产品一区一区三区四川| 成人超碰| 伊人影院在线观看| 一级黄影| 日本a在线免费观看| 亚洲AV秘无码不卡在线观看| 九色丨蝌蚪丨老版熟女| 欧美日韩大屌| 黄色片视频日本| 欧美aaaaaa| 成人手机AV| 中文字幕福利电影| 黄色一区二区三区| 99国产精品99久久久久久| 国产秘久久一区二区| 欧美猛交| 天天干一干| 夜夜高潮夜夜爽| 啪啪毛片| 欧美疯狂做受XXXXX高潮| 国产3区| 91丝袜一区二区三区| 一线毛片| 成人自拍在线| 亚洲在线中文| 国产21区| 国产乱子伦一区二区三区免看 | www.大吊视频| 男女啪啪网站| 操逼视频免费看| 国产一级a| 黄色电影免费在线观看| 操逼在线视频| 看毛片的网站| 日韩成人免费| 日逼视频免费观看| www.麻豆网91成人久久久| 伊人久久大| 草视频| 黄色在线免费| 成年人黄色网址| 久久AV片| 日本A级视频| 国产丨熟女丨国产熟女视频| 18禁一区二区三区| 西西特级无码444www| 国精产品一区一区三区| 特级西西444www高清| 中文字幕在线亚洲| 国产又爽又黄免费网站在线观看| 中日韩一级片| 日韩无码网址| 国产女人18毛片18精品| 特级特黄AAAAAAAA片| 男人天堂网在线| 色婷婷综合久久久中文字幕| 欧美一卡二卡三卡| 亚洲视频网| 欧美在线a| www.啪啪| 成人无码免费毛片A片| 日韩在线不卡| 久久大香蕉| 中文字幕你懂的在线三级| 国产精品HongKong麻豆| 亚洲成人免费福利| 中文字幕视频在线免费观看| 亚洲欧美激情视频| 小早川怜子精品一区二区| 九色av| 操美女的网站| 亚洲天堂一区在线观看| 大香蕉伊人综合在线| 国产91探花精品一区二区| 91欧美性爱| 婷婷午夜精品久久久久久| 精品白浆| 国产亚洲91| 欧美精品一级片| 一级片在线视频| 3344gc在线观看入口| 久久久久久AV| 91人妻中文字幕在线精品| 精品无码视频| 1插菊花综合网| 成人午夜精品福利免费| 在线观看毛片网站| 丝袜二区| 色婷婷香蕉在线一区二区| 蜜桃久久精品成人无码AV| 在线观看AV网站| 竹菊传媒一区二区三区| 亚卅无码| 久久久成人片| 99热r| 三级成人无码| 无码h| 亚洲日韩AV在线| 操逼逼视频| 久草视频99| 日韩主播在线| 亚洲欧美日本在线| 99热这里是精品| 2024AV在线| 一区二区有限公司| 自拍偷拍精品| 国产色哟哟| 白浆av| 成人亚洲| 无码任你躁久久久久| 奇米影视av| 日p视频在线观看| 免费一级网站| 午夜在线免费视频| 国产一区二区三区四区五区在线| 99热这里有精品| 伊人久久大香线蕉av一区| 91人妻无码一区二区三区| 天天色天天色| 永久免费不卡在线观看黄网站| 成人久久大香蕉| 国产精品无码无套在线照片| 久久天堂AV综合合色蜜桃网| 翔田千里无码播放| 黄色成人网站在线观看免费| 亚洲免费在线视频观看| 大香蕉人妻| 天天操嫩逼无套视频| 亚洲一本色道中文无码| 99天堂网| 婷婷伊人中文字幕| 青娱乐亚洲精品| 人妻精品一区二区| 婷婷色av| 欧美在线不卡综合| 国内一级黄片| 69乱伦视频| 久久大陆| 91人妻人人澡人人澡人人精品| 西西西444www无码视| 69AV在线观看| 成人小说视频在线社区| 在线看V片| 亚洲Av秘无码一区二区| 无码中文在线| 久久av片| 东北女人操逼| 国产精品123| 91视频青青草| 日韩高清无码免费观看| 欧美人妻无码| 91麻豆精品国产| 亚洲天堂免费| 欧美三级网站| 久久成人久久| 国产A级毛片久久久久久| 亚洲无码91| 蜜桃精品在线观看| 影音先锋成人AV| 亚州AV天堂| 国产精品在线免费| 亚洲三级毛片| 强开小嫩苞一区二区电影| 性色网| 天堂A片电影网站在线观看| 国产高清黑人| 蜜芽成人精品久久久视频| 极品一线天小嫩嫩真紧| 日韩狠狠| 欧美性爱在线观看| 特级特黄A级高潮播放| 猛男大粗猛爽h男人味| 蜜臀久久99精品久久久久酒店更新时间 | 色高清无码免费视频| 国产特级毛片AAAAAA| 亚洲精品观看| 日本高清无码在线| 俺来也俺也去| 一本到在线观看午夜剧场| 日韩无码A级片| 中文无码在线观看中文字幕av中文 | 韩日一级片| 欧美视频在线免费| A级视频免费观看| 中文字幕成人在线观看| 护士小雪的yin荡高日记H视频 | 欧美性爱a视频| 丰满人妻一区二区三区四区53 | 四虎av在线| 国产777777| 一级免费a片| 无码AV电影在线观看| 波多野结衣一级婬片A片免费下载 囯产精品久久久久久久久免费无码 | 艳妇乳肉豪妇荡乳AV无码福利| 污污污www精品国产网站| 亚洲大哥天天干| 午夜成人精品一区二区三区| 自拍亚洲欧美| 午夜视频在线播放| 国产日韩欧美在线观看| 亚洲最新在线视频| 激情综合视频| 日韩成人无码电影| 免费一级A片在线观看视频| 日本一级片中文字幕| 亚洲av大全| 2014AV天堂网| 国产精品成人电影| 99视频在线免费| 成人做爰黄A片免费看| 人妻少妇一区| 在线观看中文字幕| 国产成人电影一区二区| 精品视频在线观看免费| 91人妻无码精品一区二区| 亚洲成人在线| 中文√在线天堂8| 男人资源网| 欧美一级特黄A片免费看视频小说 东北嫖老熟女一区二区视频网站 国产丨熟女丨国产熟女视频 | 日韩精品免费一区二区在线观看 | 欧美1区| 麻豆一区视频| 嫩BBB槡BBBB槡BBBB百度| 国产美女av| 成人免费在线视频| 久久yy| 亚洲中文字墓| 亚洲自拍偷拍视频| 综合网视频| 粉嫩av一区二区白浆| 国产精品成人99一区无码| AV中文在线| 最新中文字幕无码| 亚洲无码AV片| 99在线视频免费观看| 欧美久久一区二区三区四区视频 | 91日逼视频| 天堂网址激情网址| 一级无码免费| 午夜黄色小视频| 国产免费一区二区三区| 8x8拨牐拨牐拨牐永久免费| 亚洲视频欧美| 国产电影一区二区三区| 做aAAAAA免费视频| 97大香蕉在线视频| 亚洲黄色在线视频| 男女精品一区| 91乱| 久草资源网| 懂色成人av影院| 91久久无码一区人妻A片蜜桃| 亚洲乱码日产精品BD在线观看| 一本一道久久综合狠狠躁牛牛影视| 91丨精品丨国产丨丝袜| 成人四区| 麻豆精品| 无码视频一二三区| 亚洲日韩AV无码| 成人h在线| 国产嫩草影院| 玖玖资源网站| 午夜国产视频| 无套内射在线播放| 9l视频自拍蝌蚪9l成人蝌蚪 | 精品无码一区二区三区四区五区| 无码精品一区二区在线| 国产女18毛片多18精品| 欧美日韩一区二区三区视频| 日韩一区二区三| 国内精品无码| 精品中文视频| 欧美在线v| 国产福利视频在线观看| www.jiujiujiu| 四虎av在线| 日韩精品成人专区无码| 久久久久黄片| 残忍另类BBWBBWBBW| 影音先锋无码AV| 免费看操逼逼| 天天日天天插| 狠狠操夜夜操| 99精品热视频| 黄网站在线观看| 搡BBB搡BBBB搡BBBB'| 操操操影院| 欧美日韩午夜福利视频| 日本婷婷| 久久99精品久久久久久| 精品视频在线免费| 色综合久久久无码中文字幕999| 中文字幕有码视频| www.蜜桃av| 国产欧美一区二区三区视频在线观看 | 大香蕉久久草| 日本親子亂子倫XXXX| 久久久无码视频| 91大长腿美女花外围在线观看 | 偷拍视频网站北条麻妃| 亚洲精品一区二区三区四区五区六区 | 黄色视频网站日本| 免费中文字幕av| 插菊花综合网1| 午夜亚洲无码|