久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android Broadcast广播机制分析

發(fā)布時(shí)間:2025/3/15 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Broadcast广播机制分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基于Android 6.0的源碼剖析, 分析android廣播的發(fā)送與接收流程。

一、概述

廣播(Broadcast)機(jī)制用于進(jìn)程/線(xiàn)程間通信,廣播分為廣播發(fā)送和廣播接收兩個(gè)過(guò)程,其中廣播接收者BroadcastReceiver便是Android四大組件之一。

BroadcastReceiver分為兩類(lèi):

  • 靜態(tài)廣播接收者:通過(guò)AndroidManifest.xml的標(biāo)簽來(lái)申明的BroadcastReceiver。
  • 動(dòng)態(tài)廣播接收者:通過(guò)AMS.registerReceiver()方式注冊(cè)的BroadcastReceiver,動(dòng)態(tài)注冊(cè)更為靈活,可在不需要時(shí)通過(guò)unregisterReceiver()取消注冊(cè)。

從廣播發(fā)送方式可分為三類(lèi):

  • 普通廣播:通過(guò)Context.sendBroadcast()發(fā)送,可并行處理
  • 有序廣播:通過(guò)Context.sendOrderedBroadcast()發(fā)送,串行處理
  • Sticky廣播:通過(guò)Context.sendOrderedBroadcast()發(fā)送

二、注冊(cè)廣播

2.1 registerReceiver

廣播注冊(cè),對(duì)于應(yīng)用開(kāi)發(fā)來(lái)說(shuō),往往是在Activity/Service中調(diào)用registerReceiver()方法,而Activity/Service都間接繼承于Context抽象類(lèi),真正干活是交給ContextImpl類(lèi)。另外調(diào)用getOuterContext()可獲取最外層的調(diào)用者Activity/Service。

[ContextImpl.java]

@Override public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {return registerReceiver(receiver, filter, null, null); }@Override public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter,String broadcastPermission, Handler scheduler) {//【見(jiàn)小節(jié)2.2】return registerReceiverInternal(receiver, getUserId(),filter, broadcastPermission, scheduler, getOuterContext()); }

當(dāng)執(zhí)行兩參數(shù)的registerReceiver方法,增加兩個(gè)broadcastPermission=null和scheduler=null調(diào)用四參數(shù)的注冊(cè)方法。其中broadcastPermission擁有廣播的權(quán)限控制,scheduler用于指定接收到廣播時(shí)onRecive執(zhí)行線(xiàn)程,當(dāng)scheduler=null則默認(rèn)代表在主線(xiàn)程中執(zhí)行,這也是最常見(jiàn)的用法。 再然后調(diào)用6參數(shù)的registerReceiverInternal。

2.2 registerReceiverInternal

[ContextImpl.java]

private Intent registerReceiverInternal(BroadcastReceiver receiver, int userId,IntentFilter filter, String broadcastPermission,Handler scheduler, Context context) {IIntentReceiver rd = null;if (receiver != null) {if (mPackageInfo != null && context != null) {if (scheduler == null) {//將主線(xiàn)程Handler賦予scheulerscheduler = mMainThread.getHandler();}//獲取IIntentReceiver對(duì)象【2.3】rd = mPackageInfo.getReceiverDispatcher(receiver, context, scheduler,mMainThread.getInstrumentation(), true);} else {if (scheduler == null) {scheduler = mMainThread.getHandler();}rd = new LoadedApk.ReceiverDispatcher(receiver, context, scheduler, null, true).getIIntentReceiver();}}try {//調(diào)用AMP.registerReceiver 【2.4】return ActivityManagerNative.getDefault().registerReceiver(mMainThread.getApplicationThread(), mBasePackageName,rd, filter, broadcastPermission, userId);} catch (RemoteException e) {return null;} }

ActivityManagerNative.getDefault()返回的是ActivityManagerProxy對(duì)象,簡(jiǎn)稱(chēng)AMP,該方法中參數(shù)有mMainThread.getApplicationThread()返回的是ApplicationThread,這是Binder的Bn端,用于system_server進(jìn)程與該進(jìn)程的通信。

2.3 LoadedApk.getReceiverDispatcher

[-> LoadedApk.java]

public IIntentReceiver getReceiverDispatcher(BroadcastReceiver r,Context context, Handler handler,Instrumentation instrumentation, boolean registered) {synchronized (mReceivers) {LoadedApk.ReceiverDispatcher rd = null;ArrayMap<BroadcastReceiver, LoadedApk.ReceiverDispatcher> map = null;//此處registered=true,則進(jìn)入該分支if (registered) {map = mReceivers.get(context);if (map != null) {rd = map.get(r);}}if (rd == null) {//當(dāng)廣播分發(fā)者為空,則創(chuàng)建ReceiverDispatcher【2.3.1】rd = new ReceiverDispatcher(r, context, handler,instrumentation, registered);if (registered) {if (map == null) {map = new ArrayMap<BroadcastReceiver, LoadedApk.ReceiverDispatcher>();mReceivers.put(context, map);}map.put(r, rd);}} else {//驗(yàn)證廣播分發(fā)者的context、handler是否一致rd.validate(context, handler);}rd.mForgotten = false;//獲取IIntentReceiver對(duì)象return rd.getIIntentReceiver();} }

不妨令 以BroadcastReceiver(廣播接收者)為key,LoadedApk.ReceiverDispatcher(分發(fā)者)為value的ArrayMap 記為A。此處mReceivers是一個(gè)以Context為key,以A為value的ArrayMap。對(duì)于ReceiverDispatcher(廣播分發(fā)者),當(dāng)不存在時(shí)則創(chuàng)建一個(gè)。

2.3.1 創(chuàng)建ReceiverDispatcher

ReceiverDispatcher(BroadcastReceiver receiver, Context context,Handler activityThread, Instrumentation instrumentation,boolean registered) {//創(chuàng)建InnerReceiver【2.3.2】mIIntentReceiver = new InnerReceiver(this, !registered);mReceiver = receiver;mContext = context;mActivityThread = activityThread;mInstrumentation = instrumentation;mRegistered = registered;mLocation = new IntentReceiverLeaked(null);mLocation.fillInStackTrace(); }

2.3.2 創(chuàng)建InnerReceiver

final static class InnerReceiver extends IIntentReceiver.Stub {final WeakReference<LoadedApk.ReceiverDispatcher> mDispatcher;final LoadedApk.ReceiverDispatcher mStrongRef;InnerReceiver(LoadedApk.ReceiverDispatcher rd, boolean strong) {mDispatcher = new WeakReference<LoadedApk.ReceiverDispatcher>(rd);mStrongRef = strong ? rd : null;}... }

ReceiverDispatcher(廣播分發(fā)者)有一個(gè)內(nèi)部類(lèi)InnerReceiver,該類(lèi)繼承于IIntentReceiver.Stub。顯然,這是一個(gè)Binder服務(wù)端,廣播分發(fā)者通過(guò)rd.getIIntentReceiver()可獲取該Binder服務(wù)端對(duì)象InnerReceiver,用于Binder IPC通信。

2.4 AMP.registerReceiver

[-> ActivityManagerNative.java]

public Intent registerReceiver(IApplicationThread caller, String packageName,IIntentReceiver receiver,IntentFilter filter, String perm, int userId) throws RemoteException {Parcel data = Parcel.obtain();Parcel reply = Parcel.obtain();data.writeInterfaceToken(IActivityManager.descriptor);data.writeStrongBinder(caller != null ? caller.asBinder() : null);data.writeString(packageName);data.writeStrongBinder(receiver != null ? receiver.asBinder() : null);filter.writeToParcel(data, 0);data.writeString(perm);data.writeInt(userId);//Command為REGISTER_RECEIVER_TRANSACTIONmRemote.transact(REGISTER_RECEIVER_TRANSACTION, data, reply, 0);reply.readException();Intent intent = null;int haveIntent = reply.readInt();if (haveIntent != 0) {intent = Intent.CREATOR.createFromParcel(reply);}reply.recycle();data.recycle();return intent; }

這里有兩個(gè)Binder服務(wù)端對(duì)象caller和receiver,AMP通過(guò)Binder驅(qū)動(dòng)將這些信息發(fā)送給system_server進(jìn)程中的AMS對(duì)象,接下來(lái)進(jìn)入AMS.registerReceiver。

2.5 AMS.registerReceiver

[-> ActivityManagerService.java]

public Intent registerReceiver(IApplicationThread caller, String callerPackage,IIntentReceiver receiver, IntentFilter filter, String permission, int userId) {//孤立進(jìn)程不允許注冊(cè)廣播接收者enforceNotIsolatedCaller("registerReceiver");ArrayList<Intent> stickyIntents = null;ProcessRecord callerApp = null;int callingUid;int callingPid;synchronized(this) {if (caller != null) {//從mLruProcesses隊(duì)列中查找調(diào)用者的ProcessRecord 【見(jiàn)2.5.1】callerApp = getRecordForAppLocked(caller);//查詢(xún)不到目標(biāo)進(jìn)程,則拋出異常if (callerApp == null) {throw new SecurityException("");}//非系統(tǒng)進(jìn)程且包名不等于“android”,同時(shí)調(diào)用者進(jìn)程不包括該包名時(shí)拋異常if (callerApp.info.uid != Process.SYSTEM_UID &&!callerApp.pkgList.containsKey(callerPackage) &&!"android".equals(callerPackage)) {throw new SecurityException("");}callingUid = callerApp.info.uid;callingPid = callerApp.pid;} else {callerPackage = null;callingUid = Binder.getCallingUid();callingPid = Binder.getCallingPid();}userId = handleIncomingUser(callingPid, callingUid, userId,true, ALLOW_FULL_ONLY, "registerReceiver", callerPackage);//獲取IntentFilter中的actionsIterator<String> actions = filter.actionsIterator();if (actions == null) {ArrayList<String> noAction = new ArrayList<String>(1);noAction.add(null);actions = noAction.iterator();}int[] userIds = { UserHandle.USER_ALL, UserHandle.getUserId(callingUid) };while (actions.hasNext()) {String action = actions.next();for (int id : userIds) {//從mStickyBroadcasts中查看用戶(hù)的sticky IntentArrayMap<String, ArrayList<Intent>> stickies = mStickyBroadcasts.get(id);if (stickies != null) {ArrayList<Intent> intents = stickies.get(action);if (intents != null) {if (stickyIntents == null) {stickyIntents = new ArrayList<Intent>();}//將sticky Intent加入到隊(duì)列stickyIntents.addAll(intents);}}}}}ArrayList<Intent> allSticky = null;if (stickyIntents != null) {final ContentResolver resolver = mContext.getContentResolver();for (int i = 0, N = stickyIntents.size(); i < N; i++) {Intent intent = stickyIntents.get(i);//查詢(xún)匹配的sticky廣播 【見(jiàn)2.5.2】if (filter.match(resolver, intent, true, TAG) >= 0) {if (allSticky == null) {allSticky = new ArrayList<Intent>();}//匹配成功,則將給intent添加到allSticky隊(duì)列allSticky.add(intent);}}}//當(dāng)IIntentReceiver為空,則直接返回第一個(gè)sticky Intent,Intent sticky = allSticky != null ? allSticky.get(0) : null;if (receiver == null) {return sticky;}synchronized (this) {if (callerApp != null && (callerApp.thread == null|| callerApp.thread.asBinder() != caller.asBinder())) {//調(diào)用者已經(jīng)死亡return null;}ReceiverList rl = mRegisteredReceivers.get(receiver.asBinder());if (rl == null) {//對(duì)于沒(méi)有注冊(cè)的廣播,則創(chuàng)建接收者隊(duì)列rl = new ReceiverList(this, callerApp, callingPid, callingUid,userId, receiver);if (rl.app != null) {rl.app.receivers.add(rl);} else {try {//注冊(cè)死亡通知receiver.asBinder().linkToDeath(rl, 0);} catch (RemoteException e) {return sticky;}rl.linkedToDeath = true;}//新創(chuàng)建的接收者隊(duì)列,添加到已注冊(cè)廣播隊(duì)列。mRegisteredReceivers.put(receiver.asBinder(), rl);}...//創(chuàng)建BroadcastFilter對(duì)象,并添加到接收者隊(duì)列BroadcastFilter bf = new BroadcastFilter(filter, rl, callerPackage,permission, callingUid, userId);rl.add(bf);//新創(chuàng)建的廣播過(guò)濾者,添加到ReceiverResolver隊(duì)列mReceiverResolver.addFilter(bf);//所有匹配該filter的sticky廣播執(zhí)行入隊(duì)操作//如果沒(méi)有使用sendStickyBroadcast,則allSticky=null。if (allSticky != null) {ArrayList receivers = new ArrayList();receivers.add(bf);final int stickyCount = allSticky.size();for (int i = 0; i < stickyCount; i++) {Intent intent = allSticky.get(i);//當(dāng)intent為前臺(tái)廣播,則返回mFgBroadcastQueue//當(dāng)intent為后臺(tái)廣播,則返回mBgBroadcastQueueBroadcastQueue queue = broadcastQueueForIntent(intent);//創(chuàng)建BroadcastRecordBroadcastRecord r = new BroadcastRecord(queue, intent, null,null, -1, -1, null, null, AppOpsManager.OP_NONE, null, receivers,null, 0, null, null, false, true, true, -1);//該廣播加入到并行廣播隊(duì)列queue.enqueueParallelBroadcastLocked(r);//調(diào)度廣播,發(fā)送BROADCAST_INTENT_MSG消息,觸發(fā)處理下一個(gè)廣播。queue.scheduleBroadcastsLocked();}}return sticky;} }

其中mRegisteredReceivers記錄著所有已注冊(cè)的廣播,以receiver IBinder為key, ReceiverList為value為HashMap。另外,這個(gè)過(guò)程涉及對(duì)象ReceiverList,BroadcastFilter,BroadcastRecord的創(chuàng)建。

在BroadcastQueue中有兩個(gè)廣播隊(duì)列mParallelBroadcasts,mOrderedBroadcasts,數(shù)據(jù)類(lèi)型都為ArrayList:

  • mParallelBroadcasts:并行廣播隊(duì)列,可以立刻執(zhí)行,而無(wú)需等待另一個(gè)廣播運(yùn)行完成,該隊(duì)列只允許動(dòng)態(tài)已注冊(cè)的廣播,從而避免發(fā)生同時(shí)拉起大量進(jìn)程來(lái)執(zhí)行廣播,前臺(tái)的和后臺(tái)的廣播分別位于獨(dú)立的隊(duì)列。
  • mOrderedBroadcasts:有序廣播隊(duì)列,同一時(shí)間只允許執(zhí)行一個(gè)廣播,該隊(duì)列頂部的廣播便是活動(dòng)廣播,其他廣播必須等待該廣播結(jié)束才能運(yùn)行,也是獨(dú)立區(qū)別前臺(tái)的和后臺(tái)的廣播。
2.5.1 AMS.getRecordForAppLocked
final ProcessRecord getRecordForAppLocked(IApplicationThread thread) {if (thread == null) {return null;}//從mLruProcesses隊(duì)列中查看int appIndex = getLRURecordIndexForAppLocked(thread);return appIndex >= 0 ? mLruProcesses.get(appIndex) : null; }

mLruProcesses數(shù)據(jù)類(lèi)型為ArrayList<ProcessRecord>,而ProcessRecord對(duì)象有一個(gè)IApplicationThread字段,根據(jù)該字段查找出滿(mǎn)足條件的ProcessRecord對(duì)象。

2.5.2 IntentFilter.match
public final int match(ContentResolver resolver, Intent intent,boolean resolve, String logTag) {String type = resolve ? intent.resolveType(resolver) : intent.getType();return match(intent.getAction(), type, intent.getScheme(),intent.getData(), intent.getCategories(), logTag); }public final int match(String action, String type, String scheme,Uri data, Set<String> categories, String logTag) {//不存在匹配的actionif (action != null && !matchAction(action)) {return NO_MATCH_ACTION; }//不存在匹配的type或dataint dataMatch = matchData(type, scheme, data);if (dataMatch < 0) {return dataMatch; }//不存在匹配的categoryString categoryMismatch = matchCategories(categories);if (categoryMismatch != null) {return NO_MATCH_CATEGORY;}return dataMatch; }

該方法用于匹配發(fā)起的Intent數(shù)據(jù)是否匹配成功,匹配項(xiàng)共有4項(xiàng)action, type, data, category,任何一項(xiàng)匹配不成功都會(huì)失敗。

小結(jié)

注冊(cè)廣播的過(guò)程,主要功能:

  • 創(chuàng)建ReceiverList(接收者隊(duì)列),并添加到AMS.mRegisteredReceivers(已注冊(cè)廣播隊(duì)列);
  • 創(chuàng)建BroadcastFilter(廣播過(guò)濾者),并添加到AMS.mReceiverResolver(接收者的解析人);
  • 當(dāng)注冊(cè)的是Sticky廣播,則創(chuàng)建BroadcastRecord,并添加到BroadcastQueue的mParallelBroadcasts(并行廣播隊(duì)列),注冊(cè)后調(diào)用AMS來(lái)盡快處理該廣播。

三、 發(fā)送廣播

發(fā)送廣播,同樣往往是在Activity/Service中調(diào)用registerReceiver()方法,而Activity/Service都間接繼承于Context抽象類(lèi),真正干活是交給ContextImpl類(lèi)。

3.1 sendBroadcast

[ContextImpl.java]

@Override public void sendBroadcast(Intent intent) {warnIfCallingFromSystemProcess();String resolvedType = intent.resolveTypeIfNeeded(getContentResolver());try {intent.prepareToLeaveProcess();// 調(diào)用AMP.broadcastIntent 【見(jiàn)3.2】ActivityManagerNative.getDefault().broadcastIntent(mMainThread.getApplicationThread(), intent, resolvedType, null,Activity.RESULT_OK, null, null, null, AppOpsManager.OP_NONE, null, false, false,getUserId());} catch (RemoteException e) {throw new RuntimeException("Failure from system", e);} }

3.2 AMP.broadcastIntent

[-> ActivityManagerNative.java]

public int broadcastIntent(IApplicationThread caller,Intent intent, String resolvedType, IIntentReceiver resultTo,int resultCode, String resultData, Bundle map,String[] requiredPermissions, int appOp, Bundle options, boolean serialized,boolean sticky, int userId) throws RemoteException {Parcel data = Parcel.obtain();Parcel reply = Parcel.obtain();data.writeInterfaceToken(IActivityManager.descriptor);data.writeStrongBinder(caller != null ? caller.asBinder() : null);intent.writeToParcel(data, 0);data.writeString(resolvedType);data.writeStrongBinder(resultTo != null ? resultTo.asBinder() : null);data.writeInt(resultCode);data.writeString(resultData);data.writeBundle(map);data.writeStringArray(requiredPermissions);data.writeInt(appOp);data.writeBundle(options);data.writeInt(serialized ? 1 : 0);data.writeInt(sticky ? 1 : 0);data.writeInt(userId);//Command為BROADCAST_INTENT_TRANSACTIONmRemote.transact(BROADCAST_INTENT_TRANSACTION, data, reply, 0);reply.readException();int res = reply.readInt();reply.recycle();data.recycle();return res; }

3.3 AMS.broadcastIntent

[-> ActivityManagerService.java]

public final int broadcastIntent(IApplicationThread caller,Intent intent, String resolvedType, IIntentReceiver resultTo,int resultCode, String resultData, Bundle resultExtras,String[] requiredPermissions, int appOp, Bundle options,boolean serialized, boolean sticky, int userId) {enforceNotIsolatedCaller("broadcastIntent");synchronized(this) {//驗(yàn)證廣播intent是否有效intent = verifyBroadcastLocked(intent);//獲取調(diào)用者進(jìn)程記錄對(duì)象final ProcessRecord callerApp = getRecordForAppLocked(caller);final int callingPid = Binder.getCallingPid();final int callingUid = Binder.getCallingUid();final long origId = Binder.clearCallingIdentity();//【見(jiàn)小節(jié)3.4】int res = broadcastIntentLocked(callerApp,callerApp != null ? callerApp.info.packageName : null,intent, resolvedType, resultTo, resultCode, resultData, resultExtras,requiredPermissions, appOp, null, serialized, sticky,callingPid, callingUid, userId);Binder.restoreCallingIdentity(origId);return res;} }

broadcastIntent()方法有兩個(gè)布爾參數(shù)serialized和sticky來(lái)共同決定是普通廣播,有序廣播,還是Sticky廣播,參數(shù)如下:

類(lèi)型 serialized sticky
sendBroadcast false false
sendOrderedBroadcast true false
sendStickyBroadcast false true

3.4 AMS.broadcastIntentLocked

private final int broadcastIntentLocked(ProcessRecord callerApp,String callerPackage, Intent intent, String resolvedType,IIntentReceiver resultTo, int resultCode, String resultData,Bundle resultExtras, String[] requiredPermissions, int appOp, Bundle options,boolean ordered, boolean sticky, int callingPid, int callingUid, int userId) {//part 1: 設(shè)置flag//part 2: 廣播權(quán)限驗(yàn)證//part 3: 處理系統(tǒng)相關(guān)廣播//part 4: 增加sticky廣播//part 5: 查詢(xún)r(jià)eceivers和registeredReceivers//part 6: 處理并行廣播//part 7: 合并registeredReceivers到receivers//part 8: 處理串行廣播return ActivityManager.BROADCAST_SUCCESS; }

broadcastIntentLocked方法比較長(zhǎng),這里劃分為8個(gè)部分來(lái)分別說(shuō)明。

part 1: 設(shè)置廣播flag
intent = new Intent(intent);//增加該flag,則廣播不會(huì)發(fā)送給已停止的packageintent.addFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES);//當(dāng)沒(méi)有啟動(dòng)完成時(shí),不允許啟動(dòng)新進(jìn)程if (!mProcessesReady && (intent.getFlags()&Intent.FLAG_RECEIVER_BOOT_UPGRADE) == 0) {intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);}userId = handleIncomingUser(callingPid, callingUid, userId,true, ALLOW_NON_FULL, "broadcast", callerPackage);//檢查發(fā)送廣播時(shí)用戶(hù)狀態(tài)if (userId != UserHandle.USER_ALL && !isUserRunningLocked(userId, false)) {if ((callingUid != Process.SYSTEM_UID|| (intent.getFlags() & Intent.FLAG_RECEIVER_BOOT_UPGRADE) == 0)&& !Intent.ACTION_SHUTDOWN.equals(intent.getAction())) {return ActivityManager.BROADCAST_FAILED_USER_STOPPED;}}

這個(gè)過(guò)程最重要的工作是:

  • 添加flag=FLAG_EXCLUDE_STOPPED_PACKAGES,保證已停止app不會(huì)收到該廣播;
  • 當(dāng)系統(tǒng)還沒(méi)有啟動(dòng)完成,則不允許啟動(dòng)新進(jìn)程,,即只有動(dòng)態(tài)注冊(cè)receiver才能接受廣播
  • 當(dāng)非USER_ALL廣播且當(dāng)前用戶(hù)并沒(méi)有處于Running的情況下,除非是系統(tǒng)升級(jí)廣播或者關(guān)機(jī)廣播,否則直接返回。

BroadcastReceiver還有其他flag,位于Intent.java常量:

FLAG_RECEIVER_REGISTERED_ONLY //只允許已注冊(cè)receiver接收廣播 FLAG_RECEIVER_REPLACE_PENDING //新廣播會(huì)替代相同廣播 FLAG_RECEIVER_FOREGROUND //只允許前臺(tái)receiver接收廣播 FLAG_RECEIVER_NO_ABORT //對(duì)于有序廣播,先接收到的receiver無(wú)權(quán)拋棄廣播 FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT //Boot完成之前,只允許已注冊(cè)receiver接收廣播 FLAG_RECEIVER_BOOT_UPGRADE //升級(jí)模式下,允許系統(tǒng)準(zhǔn)備就緒前可以發(fā)送廣播
part 2: 廣播權(quán)限驗(yàn)證
int callingAppId = UserHandle.getAppId(callingUid);if (callingAppId == Process.SYSTEM_UID || callingAppId == Process.PHONE_UID|| callingAppId == Process.SHELL_UID || callingAppId == Process.BLUETOOTH_UID|| callingAppId == Process.NFC_UID || callingUid == 0) {//直接通過(guò)} else if (callerApp == null || !callerApp.persistent) {try {if (AppGlobals.getPackageManager().isProtectedBroadcast(intent.getAction())) {//不允許發(fā)送給受保護(hù)的廣播throw new SecurityException(msg);} else if (AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(intent.getAction())) {//這個(gè)case是出于兼容性考慮,限制只允許發(fā)送給自己。...}} catch (RemoteException e) {return ActivityManager.BROADCAST_SUCCESS;}}

主要功能:

  • 對(duì)于callingAppId為SYSTEM_UID,PHONE_UID,SHELL_UID,BLUETOOTH_UID,NFC_UID之一或者callingUid == 0時(shí)都暢通無(wú)阻;
  • 否則對(duì)于調(diào)用者進(jìn)程為空并且不是persistent進(jìn)程的情況下:
    • 當(dāng)發(fā)送的是受保護(hù)廣播mProtectedBroadcasts(只允許系統(tǒng)使用),則拋出異常;
    • 當(dāng)action為ACTION_APPWIDGET_CONFIGURE時(shí),雖然不希望該應(yīng)用發(fā)送這種廣播,處于兼容性考慮,限制該廣播只允許發(fā)送給自己,否則拋出異常。
part 3: 處理系統(tǒng)相關(guān)廣播
final String action = intent.getAction();if (action != null) {switch (action) {case Intent.ACTION_UID_REMOVED:mBatteryStatsService.removeUid(uid);mAppOpsService.uidRemoved(uid);break;case Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE:String list[] = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);if (list != null && list.length > 0) {for (int i = 0; i < list.length; i++) {forceStopPackageLocked(list[i], -1, false, true, true,false, false, userId, "storage unmount");}mRecentTasks.cleanupLocked(UserHandle.USER_ALL);sendPackageBroadcastLocked(IApplicationThread.EXTERNAL_STORAGE_UNAVAILABLE, list,userId);}break;case Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLEmRecentTasks.cleanupLocked(UserHandle.USER_ALL);break;case Intent.ACTION_PACKAGE_REMOVED:case Intent.ACTION_PACKAGE_CHANGED:Uri data = intent.getData();boolean removed = Intent.ACTION_PACKAGE_REMOVED.equals(action);boolean fullUninstall = removed && !intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);final boolean killProcess = !intent.getBooleanExtra(Intent.EXTRA_DONT_KILL_APP, false);if (killProcess) {forceStopPackageLocked(ssp, UserHandle.getAppId(intent.getIntExtra(Intent.EXTRA_UID, -1)),false, true, true, false, fullUninstall, userId,removed ? "pkg removed" : "pkg changed");}if (removed) {sendPackageBroadcastLocked(IApplicationThread.PACKAGE_REMOVED,new String[] {ssp}, userId);if (fullUninstall) {mAppOpsService.packageRemoved(intent.getIntExtra(Intent.EXTRA_UID, -1), ssp);removeUriPermissionsForPackageLocked(ssp, userId, true);removeTasksByPackageNameLocked(ssp, userId);mBatteryStatsService.notePackageUninstalled(ssp);}} else {cleanupDisabledPackageComponentsLocked(ssp, userId, killProcess,intent.getStringArrayExtra(Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST));}break;case Intent.ACTION_PACKAGE_ADDED:Uri data = intent.getData();final boolean replacing =intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);mCompatModePackages.handlePackageAddedLocked(ssp, replacing);ApplicationInfo ai = AppGlobals.getPackageManager().getApplicationInfo(ssp, 0, 0);break;case Intent.ACTION_TIMEZONE_CHANGED:mHandler.sendEmptyMessage(UPDATE_TIME_ZONE);break;case Intent.ACTION_TIME_CHANGED:final int is24Hour = intent.getBooleanExtra(Intent.EXTRA_TIME_PREF_24_HOUR_FORMAT, false) ? 1: 0;mHandler.sendMessage(mHandler.obtainMessage(UPDATE_TIME, is24Hour, 0));BatteryStatsImpl stats = mBatteryStatsService.getActiveStatistics();synchronized (stats) {stats.noteCurrentTimeChangedLocked();}break;case Intent.ACTION_CLEAR_DNS_CACHE: mHandler.sendEmptyMessage(CLEAR_DNS_CACHE_MSG);break;case Proxy.PROXY_CHANGE_ACTION:ProxyInfo proxy = intent.getParcelableExtra(Proxy.EXTRA_PROXY_INFO);mHandler.sendMessage(mHandler.obtainMessage(UPDATE_HTTP_PROXY_MSG, proxy));break;}}

這個(gè)過(guò)程代碼較長(zhǎng),主要處于系統(tǒng)相關(guān)的廣播,如下10個(gè)case:

case Intent.ACTION_UID_REMOVED: //uid移除case Intent.ACTION_PACKAGE_REMOVED: //package移除,case Intent.ACTION_PACKAGE_CHANGED: //package改變case Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE: //外部設(shè)備不可用時(shí),強(qiáng)制停止所有波及的應(yīng)用并清空cache數(shù)據(jù)case Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE: //外部設(shè)備可用case Intent.ACTION_PACKAGE_ADDED: //增加package,處于兼容考慮case Intent.ACTION_TIMEZONE_CHANGED: //時(shí)區(qū)改變,通知所有運(yùn)行中的進(jìn)程case Intent.ACTION_TIME_CHANGED: //時(shí)間改變,通知所有運(yùn)行中的進(jìn)程case Intent.ACTION_CLEAR_DNS_CACHE: //dns緩存清空case Proxy.PROXY_CHANGE_ACTION: //網(wǎng)絡(luò)代理改變
part 4:增加sticky廣播
if (sticky) {if (checkPermission(android.Manifest.permission.BROADCAST_STICKY,callingPid, callingUid)!= PackageManager.PERMISSION_GRANTED) {throw new SecurityException("");}if (requiredPermissions != null && requiredPermissions.length > 0) {return ActivityManager.BROADCAST_STICKY_CANT_HAVE_PERMISSION;}if (intent.getComponent() != null) {//當(dāng)sticky廣播發(fā)送給指定組件,則throw Exception}if (userId != UserHandle.USER_ALL) {//當(dāng)非USER_ALL廣播跟USER_ALL廣播出現(xiàn)沖突,則throw Exception}ArrayMap<String, ArrayList<Intent>> stickies = mStickyBroadcasts.get(userId);if (stickies == null) {stickies = new ArrayMap<>();mStickyBroadcasts.put(userId, stickies);}ArrayList<Intent> list = stickies.get(intent.getAction());if (list == null) {list = new ArrayList<>();stickies.put(intent.getAction(), list);}final int stickiesCount = list.size();int i;for (i = 0; i < stickiesCount; i++) {if (intent.filterEquals(list.get(i))) {//替換已存在的sticky intentlist.set(i, new Intent(intent));break;}}//新的intent追加到listif (i >= stickiesCount) {list.add(new Intent(intent));}}

這個(gè)過(guò)程主要是將sticky廣播增加到list,并放入mStickyBroadcasts里面。

part 5:查詢(xún)r(jià)eceivers和registeredReceivers
int[] users;if (userId == UserHandle.USER_ALL) {users = mStartedUserArray; //廣播給所有已啟動(dòng)用戶(hù)} else {users = new int[] {userId}; //廣播給指定用戶(hù)}List receivers = null;List<BroadcastFilter> registeredReceivers = null;//找出所有能接收該廣播的receiversif ((intent.getFlags()&Intent.FLAG_RECEIVER_REGISTERED_ONLY) == 0) {//根據(jù)intent查找相應(yīng)的receiversreceivers = collectReceiverComponents(intent, resolvedType, callingUid, users);}if (intent.getComponent() == null) {if (userId == UserHandle.USER_ALL && callingUid == Process.SHELL_UID) {UserManagerService ums = getUserManagerLocked();for (int i = 0; i < users.length; i++) {//shell用戶(hù)是否開(kāi)啟允許debug功能if (ums.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES, users[i])) {continue;}// 查詢(xún)動(dòng)態(tài)注冊(cè)的廣播List<BroadcastFilter> registeredReceiversForUser =mReceiverResolver.queryIntent(intent,resolvedType, false, users[i]);if (registeredReceivers == null) {registeredReceivers = registeredReceiversForUser;} else if (registeredReceiversForUser != null) {registeredReceivers.addAll(registeredReceiversForUser);}}} else {// 查詢(xún)動(dòng)態(tài)注冊(cè)的廣播registeredReceivers = mReceiverResolver.queryIntent(intent,resolvedType, false, userId);}}
  • receivers:記錄著匹配當(dāng)前intent的所有靜態(tài)注冊(cè)廣播接收者;
  • registeredReceivers:記錄著匹配當(dāng)前的所有動(dòng)態(tài)注冊(cè)的廣播接收者。

其中,mReceiverResolver是AMS的成員變量,記錄著已注冊(cè)的廣播接收者的resolver.

AMS.collectReceiverComponents

private List<ResolveInfo> collectReceiverComponents(Intent intent, String resolvedType,int callingUid, int[] users) {List<ResolveInfo> receivers = null;for (int user : users) {//調(diào)用PKMS.queryIntentReceivers,可獲取AndroidManifest.xml聲明的接收者信息List<ResolveInfo> newReceivers = AppGlobals.getPackageManager().queryIntentReceivers(intent, resolvedType, STOCK_PM_FLAGS, user);if (receivers == null) {receivers = newReceivers;} else if (newReceivers != null) {...//將所用戶(hù)的receiver整合到receivers}}return receivers; }
part 6:處理并行廣播
//用于標(biāo)識(shí)是否需要用新intent替換舊的intent。final boolean replacePending = (intent.getFlags()&Intent.FLAG_RECEIVER_REPLACE_PENDING) != 0;//處理并行廣播int NR = registeredReceivers != null ? registeredReceivers.size() : 0;if (!ordered && NR > 0) {final BroadcastQueue queue = broadcastQueueForIntent(intent);//創(chuàng)建BroadcastRecord對(duì)象BroadcastRecord r = new BroadcastRecord(queue, intent, callerApp,callerPackage, callingPid, callingUid, resolvedType, requiredPermissions,appOp, brOptions, registeredReceivers, resultTo, resultCode, resultData,resultExtras, ordered, sticky, false, userId);final boolean replaced = replacePending && queue.replaceParallelBroadcastLocked(r);if (!replaced) {//將BroadcastRecord加入到并行廣播隊(duì)列queue.enqueueParallelBroadcastLocked(r);//處理廣播【見(jiàn)小節(jié)4.1】queue.scheduleBroadcastsLocked();}registeredReceivers = null;NR = 0;}

廣播隊(duì)列中有一個(gè)成員變量mParallelBroadcasts,類(lèi)型為ArrayList,記錄著所有的并行廣播。

part 7:合并registeredReceivers到receivers
int ir = 0;if (receivers != null) {//防止應(yīng)用監(jiān)聽(tīng)該廣播,在安裝時(shí)直接運(yùn)行。String skipPackages[] = null;if (Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction())|| Intent.ACTION_PACKAGE_RESTARTED.equals(intent.getAction())|| Intent.ACTION_PACKAGE_DATA_CLEARED.equals(intent.getAction())) {Uri data = intent.getData();if (data != null) {String pkgName = data.getSchemeSpecificPart();if (pkgName != null) {skipPackages = new String[] { pkgName };}}} else if (Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE.equals(intent.getAction())) {skipPackages = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);}//將skipPackages相關(guān)的廣播接收者從receivers列表中移除if (skipPackages != null && (skipPackages.length > 0)) {for (String skipPackage : skipPackages) {if (skipPackage != null) {int NT = receivers.size();for (int it=0; it<NT; it++) {ResolveInfo curt = (ResolveInfo)receivers.get(it);if (curt.activityInfo.packageName.equals(skipPackage)) {receivers.remove(it);it--;NT--;}}}}}//前面part6有一個(gè)處理動(dòng)態(tài)廣播的過(guò)程,處理完后再執(zhí)行將動(dòng)態(tài)注冊(cè)的registeredReceivers合并到receiversint NT = receivers != null ? receivers.size() : 0;int it = 0;ResolveInfo curt = null;BroadcastFilter curr = null;while (it < NT && ir < NR) {if (curt == null) {curt = (ResolveInfo)receivers.get(it);}if (curr == null) {curr = registeredReceivers.get(ir);}if (curr.getPriority() >= curt.priority) {receivers.add(it, curr);ir++;curr = null;it++;NT++;} else { it++;curt = null;}}}while (ir < NR) {if (receivers == null) {receivers = new ArrayList();}receivers.add(registeredReceivers.get(ir));ir++;}
part 8: 處理串行廣播
if ((receivers != null && receivers.size() > 0)|| resultTo != null) {BroadcastQueue queue = broadcastQueueForIntent(intent);//創(chuàng)建BroadcastRecordBroadcastRecord r = new BroadcastRecord(queue, intent, callerApp,callerPackage, callingPid, callingUid, resolvedType,requiredPermissions, appOp, brOptions, receivers, resultTo, resultCode,resultData, resultExtras, ordered, sticky, false, userId);boolean replaced = replacePending && queue.replaceOrderedBroadcastLocked(r);if (!replaced) {//將BroadcastRecord加入到有序廣播隊(duì)列queue.enqueueOrderedBroadcastLocked(r);//處理廣播【見(jiàn)小節(jié)4.1】queue.scheduleBroadcastsLocked(); }}

廣播隊(duì)列中有一個(gè)成員變量mOrderedBroadcasts,類(lèi)型為ArrayList,記錄著所有的有序廣播。

四、 處理廣播

在發(fā)送廣播過(guò)程中會(huì)執(zhí)行scheduleBroadcastsLocked方法來(lái)處理相關(guān)的廣播

4.1 scheduleBroadcastsLocked

[-> BroadcastQueue.java]

public void scheduleBroadcastsLocked() { // 正在處理BROADCAST_INTENT_MSG消息if (mBroadcastsScheduled) {return;}//發(fā)送BROADCAST_INTENT_MSG消息mHandler.sendMessage(mHandler.obtainMessage(BROADCAST_INTENT_MSG, this));mBroadcastsScheduled = true; }

在BroadcastQueue對(duì)象創(chuàng)建時(shí),mHandler=new BroadcastHandler(handler.getLooper());那么此處交由mHandler的handleMessage來(lái)處理:

private final class BroadcastHandler extends Handler {public BroadcastHandler(Looper looper) {super(looper, null, true);}@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case BROADCAST_INTENT_MSG: {processNextBroadcast(true); //【見(jiàn)小節(jié)4.2】} break;...} }

4.2 processNextBroadcast

[-> BroadcastQueue.java]

final void processNextBroadcast(boolean fromMsg) {synchronized(mService) {//part 1: 處理并行廣播//part 2: 處理有序廣播//part 3: 獲取下條有序廣播//part 4: 處理下條有序廣播} }

此處mService為AMS,整個(gè)流程還是比較長(zhǎng)的,全程持有AMS鎖,所以廣播效率低的情況下,直接會(huì)嚴(yán)重影響這個(gè)手機(jī)的性能與流暢度,這里應(yīng)該考慮細(xì)化同步鎖的粒度。

part 1: 處理并行廣播
BroadcastRecord r; mService.updateCpuStats(); //更新CPU統(tǒng)計(jì)信息 if (fromMsg) mBroadcastsScheduled = false;while (mParallelBroadcasts.size() > 0) {r = mParallelBroadcasts.remove(0);r.dispatchTime = SystemClock.uptimeMillis();r.dispatchClockTime = System.currentTimeMillis();final int N = r.receivers.size();for (int i=0; i<N; i++) {Object target = r.receivers.get(i);//分發(fā)廣播給已注冊(cè)的receiver 【見(jiàn)小節(jié)4.3】deliverToRegisteredReceiverLocked(r, (BroadcastFilter)target, false);}addBroadcastToHistoryLocked(r);//將廣播添加歷史統(tǒng)計(jì) }
part 2:處理有序廣播
if (mPendingBroadcast != null) {boolean isDead;synchronized (mService.mPidsSelfLocked) {//從mPidsSelfLocked獲取正在處理該廣播進(jìn)程,判斷該進(jìn)程是否死亡ProcessRecord proc = mService.mPidsSelfLocked.get(mPendingBroadcast.curApp.pid);isDead = proc == null || proc.crashing;}if (!isDead) {//正在處理廣播的進(jìn)程保持活躍狀態(tài),則繼續(xù)等待其執(zhí)行完成return;} else {mPendingBroadcast.state = BroadcastRecord.IDLE;mPendingBroadcast.nextReceiver = mPendingBroadcastRecvIndex;mPendingBroadcast = null;} }boolean looped = false; do {if (mOrderedBroadcasts.size() == 0) {//所有串行廣播處理完成,則調(diào)度執(zhí)行g(shù)cmService.scheduleAppGcsLocked();if (looped) {mService.updateOomAdjLocked();}return;}r = mOrderedBroadcasts.get(0);boolean forceReceive = false;//獲取所有該廣播所有的接收者int numReceivers = (r.receivers != null) ? r.receivers.size() : 0;if (mService.mProcessesReady && r.dispatchTime > 0) {long now = SystemClock.uptimeMillis();if ((numReceivers > 0) &&(now > r.dispatchTime + (2*mTimeoutPeriod*numReceivers))) {//當(dāng)廣播處理時(shí)間超時(shí),則強(qiáng)制結(jié)束這條廣播broadcastTimeoutLocked(false);forceReceive = true;r.state = BroadcastRecord.IDLE;}}if (r.state != BroadcastRecord.IDLE) {return;}if (r.receivers == null || r.nextReceiver >= numReceivers|| r.resultAbort || forceReceive) {if (r.resultTo != null) {//處理廣播消息消息performReceiveLocked(r.callerApp, r.resultTo,new Intent(r.intent), r.resultCode,r.resultData, r.resultExtras, false, false, r.userId);r.resultTo = null;}//取消BROADCAST_TIMEOUT_MSG消息cancelBroadcastTimeoutLocked();addBroadcastToHistoryLocked(r);mOrderedBroadcasts.remove(0);r = null;looped = true;continue;} } while (r == null);

mTimeoutPeriod,對(duì)于前臺(tái)廣播則為10s,對(duì)于后臺(tái)廣播則為60s,此時(shí)廣播超時(shí)為2*mTimeoutPeriod*numReceivers,接收者越多則廣播超時(shí)總時(shí)長(zhǎng)越長(zhǎng)。

part 3: 獲取下條有序廣播
//獲取下一個(gè)receiver的index int recIdx = r.nextReceiver++;r.receiverTime = SystemClock.uptimeMillis(); if (recIdx == 0) {r.dispatchTime = r.receiverTime;r.dispatchClockTime = System.currentTimeMillis(); } if (!mPendingBroadcastTimeoutMessage) {long timeoutTime = r.receiverTime + mTimeoutPeriod;//設(shè)置廣播超時(shí)時(shí)間,發(fā)送BROADCAST_TIMEOUT_MSGsetBroadcastTimeoutLocked(timeoutTime); }final BroadcastOptions brOptions = r.options; //獲取下一個(gè)廣播接收者 final Object nextReceiver = r.receivers.get(recIdx);if (nextReceiver instanceof BroadcastFilter) {//對(duì)于動(dòng)態(tài)注冊(cè)的廣播接收者,deliverToRegisteredReceiverLocked處理廣播BroadcastFilter filter = (BroadcastFilter)nextReceiver;deliverToRegisteredReceiverLocked(r, filter, r.ordered);if (r.receiver == null || !r.ordered) {r.state = BroadcastRecord.IDLE;scheduleBroadcastsLocked();} else {...}return; }//對(duì)于靜態(tài)注冊(cè)的廣播接收者 ResolveInfo info = (ResolveInfo)nextReceiver; ComponentName component = new ComponentName(info.activityInfo.applicationInfo.packageName,info.activityInfo.name); ... //執(zhí)行各種權(quán)限檢測(cè),此處省略,當(dāng)權(quán)限不滿(mǎn)足時(shí)skip=trueif (skip) {r.receiver = null;r.curFilter = null;r.state = BroadcastRecord.IDLE;scheduleBroadcastsLocked();return; }r.state = BroadcastRecord.APP_RECEIVE; String targetProcess = info.activityInfo.processName; r.curComponent = component; final int receiverUid = info.activityInfo.applicationInfo.uid; if (r.callingUid != Process.SYSTEM_UID && isSingleton&& mService.isValidSingletonCall(r.callingUid, receiverUid)) {info.activityInfo = mService.getActivityInfoForUser(info.activityInfo, 0); } r.curReceiver = info.activityInfo; ...//Broadcast正在執(zhí)行中,stopped狀態(tài)設(shè)置成false AppGlobals.getPackageManager().setPackageStoppedState(r.curComponent.getPackageName(), false, UserHandle.getUserId(r.callingUid));
part 4: 處理下條有序廣播
//該receiver所對(duì)應(yīng)的進(jìn)程已經(jīng)運(yùn)行,則直接處理 ProcessRecord app = mService.getProcessRecordLocked(targetProcess,info.activityInfo.applicationInfo.uid, false); if (app != null && app.thread != null) {try {app.addPackage(info.activityInfo.packageName,info.activityInfo.applicationInfo.versionCode, mService.mProcessStats);processCurBroadcastLocked(r, app);return;} catch (RemoteException e) {} catch (RuntimeException e) {finishReceiverLocked(r, r.resultCode, r.resultData, r.resultExtras, r.resultAbort, false);scheduleBroadcastsLocked();r.state = BroadcastRecord.IDLE; //啟動(dòng)receiver失敗則重置狀態(tài)return;} }//該receiver所對(duì)應(yīng)的進(jìn)程尚未啟動(dòng),則創(chuàng)建該進(jìn)程 if ((r.curApp=mService.startProcessLocked(targetProcess,info.activityInfo.applicationInfo, true,r.intent.getFlags() | Intent.FLAG_FROM_BACKGROUND,"broadcast", r.curComponent,(r.intent.getFlags()&Intent.FLAG_RECEIVER_BOOT_UPGRADE) != 0, false, false))== null) {//創(chuàng)建失敗,則結(jié)束該receiverfinishReceiverLocked(r, r.resultCode, r.resultData,r.resultExtras, r.resultAbort, false);scheduleBroadcastsLocked();r.state = BroadcastRecord.IDLE;return; } mPendingBroadcast = r; mPendingBroadcastRecvIndex = recIdx;
  • 如果是動(dòng)態(tài)廣播接收者,則調(diào)用deliverToRegisteredReceiverLocked處理;
  • 如果是動(dòng)態(tài)廣播接收者,且對(duì)應(yīng)進(jìn)程已經(jīng)創(chuàng)建,則調(diào)用processCurBroadcastLocked處理;
  • 如果是動(dòng)態(tài)廣播接收者,且對(duì)應(yīng)進(jìn)程尚未創(chuàng)建,則調(diào)用startProcessLocked創(chuàng)建進(jìn)程。

4.3 deliverToRegisteredReceiverLocked

[-> BroadcastQueue.java]

private void deliverToRegisteredReceiverLocked(BroadcastRecord r,BroadcastFilter filter, boolean ordered) {...//檢查發(fā)送者是否有BroadcastFilter所需權(quán)限//以及接收者是否有發(fā)送者所需的權(quán)限等等//當(dāng)權(quán)限不滿(mǎn)足要求,則skip=true。if (!skip) {//并行廣播ordered = false,只有串行廣播才進(jìn)入該分支if (ordered) {r.receiver = filter.receiverList.receiver.asBinder();r.curFilter = filter;filter.receiverList.curBroadcast = r;r.state = BroadcastRecord.CALL_IN_RECEIVE;if (filter.receiverList.app != null) {r.curApp = filter.receiverList.app;filter.receiverList.app.curReceiver = r;mService.updateOomAdjLocked(r.curApp);}}// 處理廣播【見(jiàn)小節(jié)4.4】performReceiveLocked(filter.receiverList.app, filter.receiverList.receiver,new Intent(r.intent), r.resultCode, r.resultData,r.resultExtras, r.ordered, r.initialSticky, r.userId);if (ordered) {r.state = BroadcastRecord.CALL_DONE_RECEIVE;}...} }

4.4 deliverToRegisteredReceiverLocked

[-> BroadcastQueue.java]

private static void performReceiveLocked(ProcessRecord app, IIntentReceiver receiver,Intent intent, int resultCode, String data, Bundle extras,boolean ordered, boolean sticky, int sendingUser) throws RemoteException {//通過(guò)binder異步機(jī)制,向receiver發(fā)送intentif (app != null) {if (app.thread != null) {//調(diào)用ApplicationThreadProxy類(lèi)對(duì)應(yīng)的方法 【4.5】app.thread.scheduleRegisteredReceiver(receiver, intent, resultCode,data, extras, ordered, sticky, sendingUser, app.repProcState);} else {//應(yīng)用進(jìn)程死亡,則Recevier并不存在throw new RemoteException("app.thread must not be null");}} else {//調(diào)用者進(jìn)程為空,則執(zhí)行該分支receiver.performReceive(intent, resultCode, data, extras, ordered,sticky, sendingUser);} }

4.5 ATP.scheduleRegisteredReceiver

public void scheduleRegisteredReceiver(IIntentReceiver receiver, Intent intent,int resultCode, String dataStr, Bundle extras, boolean ordered,boolean sticky, int sendingUser, int processState) throws RemoteException {Parcel data = Parcel.obtain();data.writeInterfaceToken(IApplicationThread.descriptor);data.writeStrongBinder(receiver.asBinder());intent.writeToParcel(data, 0);data.writeInt(resultCode);data.writeString(dataStr);data.writeBundle(extras);data.writeInt(ordered ? 1 : 0);data.writeInt(sticky ? 1 : 0);data.writeInt(sendingUser);data.writeInt(processState);//command=SCHEDULE_REGISTERED_RECEIVER_TRANSACTIONmRemote.transact(SCHEDULE_REGISTERED_RECEIVER_TRANSACTION, data, null,IBinder.FLAG_ONEWAY);data.recycle(); }

ATP位于system_server進(jìn)程,是Binder Bp端通過(guò)Binder驅(qū)動(dòng)向Binder Bn端發(fā)送消息, ATP所對(duì)應(yīng)的Bn端位于發(fā)送廣播調(diào)用端所在進(jìn)程的ApplicationThread,即進(jìn)入AT.scheduleRegisteredReceiver, 接下來(lái)說(shuō)明該方法。

4.6 AT.scheduleRegisteredReceiver

[-> ActivityThread.java]

public void scheduleRegisteredReceiver(IIntentReceiver receiver, Intent intent,int resultCode, String dataStr, Bundle extras, boolean ordered,boolean sticky, int sendingUser, int processState) throws RemoteException {//更新虛擬機(jī)進(jìn)程狀態(tài)updateProcessState(processState, false);//【見(jiàn)小節(jié)4.7】receiver.performReceive(intent, resultCode, dataStr, extras, ordered,sticky, sendingUser); }

此處receiver是注冊(cè)廣播時(shí)創(chuàng)建的,見(jiàn)小節(jié)[2.3],可知該receiver=LoadedApk.ReceiverDispatcher.InnerReceiver。

4.7 InnerReceiver.performReceive

[-> LoadedApk.java]

public void performReceive(Intent intent, int resultCode, String data,Bundle extras, boolean ordered, boolean sticky, int sendingUser) {LoadedApk.ReceiverDispatcher rd = mDispatcher.get();if (rd != null) {//【4.8】rd.performReceive(intent, resultCode, data, extras, ordered, sticky, sendingUser);} else {...} }

4.8 ReceiverDispatcher.performReceive

[-> LoadedApk.java]

public void performReceive(Intent intent, int resultCode, String data,Bundle extras, boolean ordered, boolean sticky, int sendingUser) {Args args = new Args(intent, resultCode, data, extras, ordered,sticky, sendingUser);//通過(guò)handler消息機(jī)制發(fā)送args.if (!mActivityThread.post(args)) {if (mRegistered && ordered) {IActivityManager mgr = ActivityManagerNative.getDefault();args.sendFinished(mgr);}} }

其中Args繼承于BroadcastReceiver.PendingResult,實(shí)現(xiàn)了接口Runnable。這里mActivityThread.post(args) 消息機(jī)制,關(guān)于Handler消息機(jī)制,見(jiàn)Android消息機(jī)制1-Handler(Java層),把消息放入MessageQueue,再調(diào)用Args的run()方法。

4.9 Args.run

[-> LoadedApk.java]

public final class LoadedApk {static final class ReceiverDispatcher {final class Args extends BroadcastReceiver.PendingResult implements Runnable {public void run() {final BroadcastReceiver receiver = mReceiver;final boolean ordered = mOrdered;final IActivityManager mgr = ActivityManagerNative.getDefault();final Intent intent = mCurIntent;mCurIntent = null;if (receiver == null || mForgotten) {if (mRegistered && ordered) {sendFinished(mgr);}return;}try {//獲取mReceiver的類(lèi)加載器ClassLoader cl = mReceiver.getClass().getClassLoader();intent.setExtrasClassLoader(cl);setExtrasClassLoader(cl);receiver.setPendingResult(this);//回調(diào)廣播onReceive方法receiver.onReceive(mContext, intent);} catch (Exception e) {...}if (receiver.getPendingResult() != null) {finish();}}}}

最終調(diào)用BroadcastReceiver具體實(shí)現(xiàn)類(lèi)的onReceive()方法。

4.10 PendingResult.finish

[-> BroadcastReceiver.java]

public final void finish() {final IActivityManager mgr = ActivityManagerNative.getDefault();sendFinished(mgr);... }public void sendFinished(IActivityManager am) {synchronized (this) {try {if (mResultExtras != null) {mResultExtras.setAllowFds(false);}if (mOrderedHint) {//串行廣播am.finishReceiver(mToken, mResultCode, mResultData, mResultExtras,mAbortBroadcast, mFlags);} else {//并行廣播am.finishReceiver(mToken, 0, null, null, false, mFlags);}} catch (RemoteException ex) {}} }

此處AMP.finishReceiver,經(jīng)過(guò)binder調(diào)用,進(jìn)入AMS.finishReceiver方法

4.11 AMS.finishReceiver

public void finishReceiver(IBinder who, int resultCode, String resultData,Bundle resultExtras, boolean resultAbort, int flags) { ...final long origId = Binder.clearCallingIdentity();try {boolean doNext = false;BroadcastRecord r;synchronized(this) {BroadcastQueue queue = (flags & Intent.FLAG_RECEIVER_FOREGROUND) != 0? mFgBroadcastQueue : mBgBroadcastQueue;r = queue.getMatchingOrderedReceiver(who);if (r != null) {doNext = r.queue.finishReceiverLocked(r, resultCode,resultData, resultExtras, resultAbort, true);}}if (doNext) {//處理下一條廣播r.queue.processNextBroadcast(false);}trimApplications();} finally {Binder.restoreCallingIdentity(origId);} }

五、總結(jié)

未完留坑,后續(xù)總結(jié)以及增加流程圖說(shuō)明…


附錄

本文所涉及的源碼:

framework/base/core/java/android/content/BroadcastReceiver.java framework/base/core/java/android/content/Context.java framework/base/core/java/android/content/IntentFilter.javaframework/base/core/java/android/app/ContextImpl.java framework/base/core/java/android/app/LoadedApk framework/base/core/java/android/app/ActivityManagerNative.java framework/base/core/java/android/app/ApplicationThreadNative.java framework/base/core/java/android/app/ActivityThread.javaframework/base/services/core/java/com/android/server/ActivityManagerService.java framework/base/services/core/java/com/android/server/am/BroadcastQueue.java framework/base/services/core/java/com/android/server/am/BroadcastFilter.java framework/base/services/core/java/com/android/server/am/BroadcastRecord.java framework/base/services/core/java/com/android/server/am/ReceiverList.java
原文地址:http://gityuan.com/2016/06/04/broadcast-receiver/

總結(jié)

以上是生活随笔為你收集整理的Android Broadcast广播机制分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

久久久久久av无码免费看大片 | 成人av无码一区二区三区 | 亚洲无人区一区二区三区 | 亚洲春色在线视频 | www国产亚洲精品久久久日本 | 久久99国产综合精品 | 国产在线精品一区二区高清不卡 | 亚洲成av人在线观看网址 | 久久久久免费看成人影片 | 亚洲伊人久久精品影院 | 伊人久久大香线蕉午夜 | 秋霞特色aa大片 | 成人一区二区免费视频 | 欧美人妻一区二区三区 | 蜜桃av抽搐高潮一区二区 | 亚洲阿v天堂在线 | 九月婷婷人人澡人人添人人爽 | 国产午夜手机精彩视频 | 亚洲国产高清在线观看视频 | 国产色视频一区二区三区 | 欧美人与善在线com | 久久综合激激的五月天 | 九九久久精品国产免费看小说 | 久久久无码中文字幕久... | 波多野结衣乳巨码无在线观看 | 国产特级毛片aaaaaaa高清 | 国产成人无码区免费内射一片色欲 | 亚洲区欧美区综合区自拍区 | 国产成人av免费观看 | 99久久精品国产一区二区蜜芽 | 国产色在线 | 国产 | 色婷婷久久一区二区三区麻豆 | 伊人久久大香线蕉亚洲 | 国产莉萝无码av在线播放 | 色 综合 欧美 亚洲 国产 | 中文字幕av日韩精品一区二区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 狂野欧美性猛xxxx乱大交 | 美女张开腿让人桶 | 亚洲色成人中文字幕网站 | 装睡被陌生人摸出水好爽 | 少妇被粗大的猛进出69影院 | 久久人人爽人人爽人人片ⅴ | 国产97人人超碰caoprom | 午夜成人1000部免费视频 | 色欲综合久久中文字幕网 | 少妇人妻大乳在线视频 | 国产办公室秘书无码精品99 | 国内揄拍国内精品人妻 | 精品无人区无码乱码毛片国产 | 欧美三级a做爰在线观看 | 国内精品一区二区三区不卡 | 免费无码肉片在线观看 | 中文字幕无码热在线视频 | 婷婷六月久久综合丁香 | 亚洲成av人综合在线观看 | 永久黄网站色视频免费直播 | 欧美日韩在线亚洲综合国产人 | 亚洲人成人无码网www国产 | 亚洲啪av永久无码精品放毛片 | 午夜理论片yy44880影院 | 天天躁夜夜躁狠狠是什么心态 | 久久久久久久人妻无码中文字幕爆 | 一个人看的视频www在线 | 亚洲欧美日韩成人高清在线一区 | 少妇邻居内射在线 | 人人澡人摸人人添 | 成年美女黄网站色大免费全看 | a片在线免费观看 | 欧洲美熟女乱又伦 | 国产成人综合色在线观看网站 | 亚洲另类伦春色综合小说 | 亚洲成a人片在线观看无码3d | 中文毛片无遮挡高清免费 | 99久久亚洲精品无码毛片 | 亚洲娇小与黑人巨大交 | 亚洲成av人在线观看网址 | 亚洲精品久久久久久久久久久 | 国产精品国产自线拍免费软件 | 精品偷自拍另类在线观看 | 在线观看欧美一区二区三区 | 蜜桃av抽搐高潮一区二区 | 精品国产国产综合精品 | 高清不卡一区二区三区 | 欧美兽交xxxx×视频 | 色婷婷av一区二区三区之红樱桃 | 人妻无码αv中文字幕久久琪琪布 | 欧美日本免费一区二区三区 | 日本乱偷人妻中文字幕 | 精品一区二区不卡无码av | 日本高清一区免费中文视频 | 亚洲成熟女人毛毛耸耸多 | 国产综合在线观看 | 任你躁在线精品免费 | 在线视频网站www色 | 国产三级精品三级男人的天堂 | 色欲av亚洲一区无码少妇 | 四虎国产精品免费久久 | 狠狠躁日日躁夜夜躁2020 | 扒开双腿吃奶呻吟做受视频 | 老司机亚洲精品影院无码 | 67194成是人免费无码 | 亚洲欧美中文字幕5发布 | 欧美野外疯狂做受xxxx高潮 | 国产午夜亚洲精品不卡 | 色老头在线一区二区三区 | 澳门永久av免费网站 | 婷婷六月久久综合丁香 | 99久久无码一区人妻 | 中文字幕色婷婷在线视频 | 国产熟女一区二区三区四区五区 | 亚洲色www成人永久网址 | 久久精品99久久香蕉国产色戒 | 亚洲の无码国产の无码影院 | 国产成人精品久久亚洲高清不卡 | 99精品久久毛片a片 | 精品无码国产一区二区三区av | 98国产精品综合一区二区三区 | 无码av岛国片在线播放 | 娇妻被黑人粗大高潮白浆 | 日日橹狠狠爱欧美视频 | 亚洲乱码国产乱码精品精 | 丝袜人妻一区二区三区 | 中文亚洲成a人片在线观看 | 在线a亚洲视频播放在线观看 | 欧美真人作爱免费视频 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 欧美性猛交内射兽交老熟妇 | 亚洲成色在线综合网站 | 性欧美熟妇videofreesex | 国产卡一卡二卡三 | 久久精品视频在线看15 | 欧美三级不卡在线观看 | 99久久人妻精品免费一区 | 人人妻人人澡人人爽人人精品 | 久久久久久久女国产乱让韩 | 日韩亚洲欧美中文高清在线 | 丰满少妇弄高潮了www | 一本久道高清无码视频 | 亚洲国产av精品一区二区蜜芽 | 中文字幕无码热在线视频 | 欧美老熟妇乱xxxxx | 国产suv精品一区二区五 | 国产免费久久久久久无码 | 亚洲成av人片天堂网无码】 | 精品厕所偷拍各类美女tp嘘嘘 | 中文字幕人妻无码一区二区三区 | 国产女主播喷水视频在线观看 | 欧美zoozzooz性欧美 | 性色欲网站人妻丰满中文久久不卡 | 亚洲综合精品香蕉久久网 | 人妻少妇精品视频专区 | 欧洲精品码一区二区三区免费看 | 无码免费一区二区三区 | 丰满诱人的人妻3 | 亚洲 日韩 欧美 成人 在线观看 | 欧美三级不卡在线观看 | 四十如虎的丰满熟妇啪啪 | 午夜精品久久久内射近拍高清 | 亚洲精品综合五月久久小说 | 1000部啪啪未满十八勿入下载 | 天干天干啦夜天干天2017 | 久久久久久久女国产乱让韩 | 精品偷自拍另类在线观看 | 国产精品自产拍在线观看 | 97资源共享在线视频 | 精品欧美一区二区三区久久久 | 国产精品igao视频网 | 丰满少妇人妻久久久久久 | 久久精品国产一区二区三区 | 亚洲乱码中文字幕在线 | 亚洲精品久久久久久久久久久 | 精品无码国产自产拍在线观看蜜 | 国产亚洲精品久久久久久久久动漫 | 中文字幕日产无线码一区 | 日韩亚洲欧美精品综合 | 又大又紧又粉嫩18p少妇 | 99视频精品全部免费免费观看 | 欧美国产亚洲日韩在线二区 | 无码人妻久久一区二区三区不卡 | 亚洲区小说区激情区图片区 | 亚洲欧美中文字幕5发布 | 欧美丰满熟妇xxxx性ppx人交 | 欧美日本免费一区二区三区 | 亚洲精品国产品国语在线观看 | 午夜性刺激在线视频免费 | 国产午夜精品一区二区三区嫩草 | 国产亚洲精品久久久久久 | 久9re热视频这里只有精品 | 动漫av一区二区在线观看 | 欧美国产日韩亚洲中文 | 亚洲а∨天堂久久精品2021 | 在线观看国产一区二区三区 | 日韩亚洲欧美中文高清在线 | 天天躁夜夜躁狠狠是什么心态 | 丰满人妻翻云覆雨呻吟视频 | 欧美性生交xxxxx久久久 | 国产精品久久久久影院嫩草 | 色综合久久中文娱乐网 | 秋霞成人午夜鲁丝一区二区三区 | 377p欧洲日本亚洲大胆 | 女高中生第一次破苞av | 无码av中文字幕免费放 | 亚洲欧美国产精品专区久久 | 国产婷婷色一区二区三区在线 | 国产人妻大战黑人第1集 | 久久久久久久人妻无码中文字幕爆 | 内射欧美老妇wbb | a在线观看免费网站大全 | 性开放的女人aaa片 | 亚洲一区二区三区四区 | 在线播放无码字幕亚洲 | 色欲av亚洲一区无码少妇 | 久久久久久亚洲精品a片成人 | 欧美 丝袜 自拍 制服 另类 | 欧美老妇交乱视频在线观看 | 久久亚洲国产成人精品性色 | 精品厕所偷拍各类美女tp嘘嘘 | 国产小呦泬泬99精品 | 欧美成人免费全部网站 | 亚洲中文字幕无码一久久区 | 性生交大片免费看l | 免费播放一区二区三区 | 国产在热线精品视频 | 国产麻豆精品一区二区三区v视界 | 乱码av麻豆丝袜熟女系列 | 麻豆av传媒蜜桃天美传媒 | 伊人久久大香线蕉午夜 | 精品一区二区三区波多野结衣 | 无码人中文字幕 | 乱人伦中文视频在线观看 | 在线成人www免费观看视频 | 色婷婷久久一区二区三区麻豆 | 激情内射亚州一区二区三区爱妻 | 国产真实夫妇视频 | a片免费视频在线观看 | 在线成人www免费观看视频 | 精品少妇爆乳无码av无码专区 | 亚洲熟女一区二区三区 | 久久熟妇人妻午夜寂寞影院 | 大色综合色综合网站 | 三上悠亚人妻中文字幕在线 | 无码人妻出轨黑人中文字幕 | 麻豆果冻传媒2021精品传媒一区下载 | 人人爽人人爽人人片av亚洲 | 丰满人妻精品国产99aⅴ | 18禁止看的免费污网站 | 午夜福利试看120秒体验区 | 中文字幕日韩精品一区二区三区 | 久久精品中文字幕一区 | 日韩精品无码免费一区二区三区 | 97久久精品无码一区二区 | 日韩欧美成人免费观看 | 男女作爱免费网站 | 内射后入在线观看一区 | 最近的中文字幕在线看视频 | 国产亚洲人成a在线v网站 | 国产深夜福利视频在线 | 久久伊人色av天堂九九小黄鸭 | 中文字幕无码乱人伦 | 国产黄在线观看免费观看不卡 | 麻豆国产丝袜白领秘书在线观看 | 国产精品自产拍在线观看 | 国产在线aaa片一区二区99 | 亚洲熟妇色xxxxx亚洲 | 午夜精品一区二区三区的区别 | 日本va欧美va欧美va精品 | 国产精品美女久久久网av | 国产亲子乱弄免费视频 | 麻豆精品国产精华精华液好用吗 | 婷婷六月久久综合丁香 | 国产超级va在线观看视频 | 捆绑白丝粉色jk震动捧喷白浆 | 久久精品国产精品国产精品污 | 波多野结衣高清一区二区三区 | 久久国内精品自在自线 | 人人澡人人透人人爽 | 国产又爽又猛又粗的视频a片 | 亚洲国产一区二区三区在线观看 | 成人片黄网站色大片免费观看 | 亚洲精品久久久久久久久久久 | 日韩少妇内射免费播放 | 中文字幕av日韩精品一区二区 | 99视频精品全部免费免费观看 | 亚洲精品鲁一鲁一区二区三区 | 精品国精品国产自在久国产87 | 青青草原综合久久大伊人精品 | 久久精品丝袜高跟鞋 | 国产精品-区区久久久狼 | 成人一在线视频日韩国产 | 少妇一晚三次一区二区三区 | 国产午夜无码视频在线观看 | 国产人成高清在线视频99最全资源 | 亚洲午夜福利在线观看 | 亚洲中文字幕va福利 | 一本久道久久综合狠狠爱 | 国产一区二区三区四区五区加勒比 | 一本大道久久东京热无码av | 国产精品永久免费视频 | 5858s亚洲色大成网站www | 人妻插b视频一区二区三区 | 无码毛片视频一区二区本码 | 四虎4hu永久免费 | 国产精品无码mv在线观看 | 丰满诱人的人妻3 | 国产成人精品一区二区在线小狼 | 男女猛烈xx00免费视频试看 | 亚洲国产精品久久久天堂 | 无码人妻黑人中文字幕 | 一本色道久久综合亚洲精品不卡 | 性啪啪chinese东北女人 | 国产成人精品优优av | 精品无码国产一区二区三区av | 亚洲日韩一区二区 | 无码精品国产va在线观看dvd | 国产精品-区区久久久狼 | 国产成人无码午夜视频在线观看 | 亚洲第一无码av无码专区 | 人人妻人人澡人人爽人人精品浪潮 | 无码人妻精品一区二区三区不卡 | 麻豆av传媒蜜桃天美传媒 | 国产国产精品人在线视 | 鲁鲁鲁爽爽爽在线视频观看 | 中文字幕无码人妻少妇免费 | 天干天干啦夜天干天2017 | 亚洲综合无码一区二区三区 | 初尝人妻少妇中文字幕 | 日韩成人一区二区三区在线观看 | 日韩人妻少妇一区二区三区 | 少妇人妻大乳在线视频 | 亚洲国产成人av在线观看 | 中文字幕无码av波多野吉衣 | 人妻无码αv中文字幕久久琪琪布 | 国产片av国语在线观看 | 久久精品中文字幕一区 | 少妇一晚三次一区二区三区 | 一本色道久久综合狠狠躁 | 欧美老妇交乱视频在线观看 | www国产精品内射老师 | 女人被爽到呻吟gif动态图视看 | 久久久精品国产sm最大网站 | 97无码免费人妻超级碰碰夜夜 | 国内老熟妇对白xxxxhd | 国产亚洲欧美在线专区 | 亚洲国产精品久久人人爱 | 大屁股大乳丰满人妻 | 在线观看欧美一区二区三区 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 欧美老妇与禽交 | 偷窥日本少妇撒尿chinese | 帮老师解开蕾丝奶罩吸乳网站 | 国产激情无码一区二区 | 国产热a欧美热a在线视频 | 色婷婷综合激情综在线播放 | 久久综合香蕉国产蜜臀av | 少妇无码一区二区二三区 | 丰满少妇人妻久久久久久 | 亚洲中文字幕无码一久久区 | 亚洲天堂2017无码 | 一本久久伊人热热精品中文字幕 | 精品国产麻豆免费人成网站 | 中文字幕日产无线码一区 | 欧美日本免费一区二区三区 | 精品 日韩 国产 欧美 视频 | 国内老熟妇对白xxxxhd | 亚洲成在人网站无码天堂 | 人妻aⅴ无码一区二区三区 | 夫妻免费无码v看片 | 综合激情五月综合激情五月激情1 | 国产超级va在线观看视频 | 国产香蕉尹人视频在线 | 久久午夜夜伦鲁鲁片无码免费 | av在线亚洲欧洲日产一区二区 | 永久免费精品精品永久-夜色 | 亚欧洲精品在线视频免费观看 | 少妇无套内谢久久久久 | 久久成人a毛片免费观看网站 | 国产精品人人爽人人做我的可爱 | 丰满诱人的人妻3 | 波多野42部无码喷潮在线 | 青草青草久热国产精品 | 中文精品无码中文字幕无码专区 | 精品人妻人人做人人爽 | 毛片内射-百度 | 小泽玛莉亚一区二区视频在线 | 国产av一区二区三区最新精品 | 国产艳妇av在线观看果冻传媒 | 日本成熟视频免费视频 | 99久久精品日本一区二区免费 | 无码一区二区三区在线观看 | а√天堂www在线天堂小说 | 国产成人综合美国十次 | 在教室伦流澡到高潮hnp视频 | 精品久久8x国产免费观看 | 日本一区二区三区免费高清 | 国产性生交xxxxx无码 | 最新版天堂资源中文官网 | 亚洲欧美中文字幕5发布 | 夜夜夜高潮夜夜爽夜夜爰爰 | 人妻无码久久精品人妻 | 国产亚洲精品久久久久久大师 | 台湾无码一区二区 | 国产精品怡红院永久免费 | 国产另类ts人妖一区二区 | 久久久无码中文字幕久... | 未满成年国产在线观看 | 乱人伦人妻中文字幕无码 | 久久久婷婷五月亚洲97号色 | 无码纯肉视频在线观看 | 激情五月综合色婷婷一区二区 | a在线亚洲男人的天堂 | 亚洲国产精品无码久久久久高潮 | 超碰97人人射妻 | 国产内射爽爽大片视频社区在线 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 成人亚洲精品久久久久软件 | 乱人伦人妻中文字幕无码久久网 | 免费看少妇作爱视频 | √8天堂资源地址中文在线 | 久久久久久a亚洲欧洲av冫 | 午夜免费福利小电影 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 给我免费的视频在线观看 | 国产免费无码一区二区视频 | 免费看少妇作爱视频 | 国产一区二区不卡老阿姨 | 四虎永久在线精品免费网址 | 国内精品久久毛片一区二区 | 国产美女精品一区二区三区 | 国产人成高清在线视频99最全资源 | 国产激情综合五月久久 | 中文字幕 人妻熟女 | 无码av最新清无码专区吞精 | 亚洲人成人无码网www国产 | 国产精品久久久一区二区三区 | 精品国产av色一区二区深夜久久 | 人妻插b视频一区二区三区 | 国产乱人无码伦av在线a | 在线а√天堂中文官网 | 久久综合九色综合欧美狠狠 | 国产成人无码a区在线观看视频app | 国产卡一卡二卡三 | 亚洲国产精品一区二区美利坚 | 亚洲欧洲日本综合aⅴ在线 | 人妻少妇精品视频专区 | 激情国产av做激情国产爱 | 亚洲中文字幕成人无码 | 国产精品国产三级国产专播 | 免费男性肉肉影院 | 人妻少妇精品无码专区动漫 | 亚洲区欧美区综合区自拍区 | 国产精品亚洲五月天高清 | 精品无人区无码乱码毛片国产 | 四虎永久在线精品免费网址 | 亚洲综合无码一区二区三区 | 狠狠躁日日躁夜夜躁2020 | 自拍偷自拍亚洲精品10p | 高潮毛片无遮挡高清免费视频 | 亚洲一区二区三区四区 | 久久精品中文字幕一区 | 国产在热线精品视频 | 日本肉体xxxx裸交 | 久久亚洲国产成人精品性色 | 无遮挡啪啪摇乳动态图 | 荡女精品导航 | 国产精品99爱免费视频 | 国产成人综合在线女婷五月99播放 | 亚洲娇小与黑人巨大交 | 18禁黄网站男男禁片免费观看 | 亚洲色偷偷男人的天堂 | 国产性生大片免费观看性 | 国语自产偷拍精品视频偷 | 性生交大片免费看女人按摩摩 | 日本精品高清一区二区 | 日本xxxx色视频在线观看免费 | 国产欧美亚洲精品a | 成人欧美一区二区三区黑人免费 | 三级4级全黄60分钟 | 国产精品无码一区二区桃花视频 | 日本精品久久久久中文字幕 | 99久久久国产精品无码免费 | 成人免费视频一区二区 | 爆乳一区二区三区无码 | 亚洲精品午夜无码电影网 | 99久久久国产精品无码免费 | 国产精品自产拍在线观看 | 国产激情无码一区二区 | 成人欧美一区二区三区黑人 | 无码午夜成人1000部免费视频 | 黑森林福利视频导航 | 国产激情艳情在线看视频 | 亚洲性无码av中文字幕 | 久久国产自偷自偷免费一区调 | 四虎国产精品免费久久 | 日韩精品无码一本二本三本色 | 国产成人精品一区二区在线小狼 | 99麻豆久久久国产精品免费 | 波多野结衣高清一区二区三区 | 美女极度色诱视频国产 | 扒开双腿疯狂进出爽爽爽视频 | 熟妇人妻无乱码中文字幕 | 女人色极品影院 | 国产精品18久久久久久麻辣 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国产亚av手机在线观看 | 国产艳妇av在线观看果冻传媒 | 正在播放东北夫妻内射 | 天堂а√在线地址中文在线 | 人妻互换免费中文字幕 | 亚洲精品国产精品乱码视色 | 丰满护士巨好爽好大乳 | 麻豆国产人妻欲求不满谁演的 | 人妻少妇精品无码专区二区 | 牲交欧美兽交欧美 | 久久亚洲精品中文字幕无男同 | 色婷婷久久一区二区三区麻豆 | 97久久国产亚洲精品超碰热 | 亚洲s色大片在线观看 | 丰满人妻精品国产99aⅴ | 久久视频在线观看精品 | 亚洲精品国偷拍自产在线观看蜜桃 | 欧美熟妇另类久久久久久多毛 | 久久久精品成人免费观看 | 亚洲精品一区二区三区大桥未久 | 在线视频网站www色 | 欧美色就是色 | 又大又硬又黄的免费视频 | 好爽又高潮了毛片免费下载 | 四十如虎的丰满熟妇啪啪 | 青青青手机频在线观看 | 中文字幕av伊人av无码av | 男人和女人高潮免费网站 | 99麻豆久久久国产精品免费 | 一本加勒比波多野结衣 | 牲交欧美兽交欧美 | 久久久久国色av免费观看性色 | 免费国产成人高清在线观看网站 | 精品无码一区二区三区的天堂 | 亚洲熟女一区二区三区 | 日韩亚洲欧美中文高清在线 | 内射爽无广熟女亚洲 | 秋霞成人午夜鲁丝一区二区三区 | 熟妇人妻无码xxx视频 | 日韩欧美群交p片內射中文 | 人人妻人人澡人人爽精品欧美 | 国产精品美女久久久久av爽李琼 | 水蜜桃av无码 | 波多野结衣av在线观看 | 亚洲男女内射在线播放 | 亚洲国产成人a精品不卡在线 | 永久免费观看美女裸体的网站 | 国产成人精品无码播放 | 国产美女精品一区二区三区 | 日日躁夜夜躁狠狠躁 | 亚洲综合色区中文字幕 | 精品少妇爆乳无码av无码专区 | 国产高潮视频在线观看 | 久久99久久99精品中文字幕 | 18无码粉嫩小泬无套在线观看 | 青草青草久热国产精品 | 欧美35页视频在线观看 | 黑人巨大精品欧美一区二区 | 久久精品国产99精品亚洲 | 少妇性l交大片欧洲热妇乱xxx | 狠狠色色综合网站 | 少妇被黑人到高潮喷出白浆 | 亚洲欧洲日本无在线码 | 嫩b人妻精品一区二区三区 | 乱码午夜-极国产极内射 | 人人妻人人澡人人爽人人精品浪潮 | 久久精品国产99久久6动漫 | 国产精品嫩草久久久久 | 强伦人妻一区二区三区视频18 | 2020久久香蕉国产线看观看 | 精品久久久中文字幕人妻 | 强辱丰满人妻hd中文字幕 | 亚洲s色大片在线观看 | 亚洲国产av美女网站 | 狠狠色欧美亚洲狠狠色www | 亚洲欧美色中文字幕在线 | 国产精品第一国产精品 | 老司机亚洲精品影院无码 | 亚洲欧美中文字幕5发布 | 久久综合久久自在自线精品自 | 未满小14洗澡无码视频网站 | 红桃av一区二区三区在线无码av | 国产精品视频免费播放 | 真人与拘做受免费视频一 | 欧美人与禽猛交狂配 | 51国偷自产一区二区三区 | 欧美熟妇另类久久久久久不卡 | 婷婷丁香五月天综合东京热 | 丝袜 中出 制服 人妻 美腿 | 精品国产麻豆免费人成网站 | 国产精品久久久久9999小说 | 色诱久久久久综合网ywww | 日日天干夜夜狠狠爱 | 色综合久久久无码中文字幕 | 国产在线一区二区三区四区五区 | 久久综合色之久久综合 | 无码一区二区三区在线观看 | 日本精品人妻无码免费大全 | 中文字幕日韩精品一区二区三区 | 亚洲精品无码国产 | 久久国产自偷自偷免费一区调 | 成人影院yy111111在线观看 | 欧美阿v高清资源不卡在线播放 | 狠狠色欧美亚洲狠狠色www | 少妇邻居内射在线 | 少妇人妻大乳在线视频 | 亚洲va中文字幕无码久久不卡 | 在线播放免费人成毛片乱码 | 波多野42部无码喷潮在线 | 精品一二三区久久aaa片 | 偷窥日本少妇撒尿chinese | 国产偷抇久久精品a片69 | 亚洲aⅴ无码成人网站国产app | 亚洲爆乳大丰满无码专区 | 人人妻人人藻人人爽欧美一区 | 日日摸夜夜摸狠狠摸婷婷 | 丰腴饱满的极品熟妇 | 亚洲 日韩 欧美 成人 在线观看 | 亚洲中文无码av永久不收费 | 午夜福利不卡在线视频 | 亚洲精品www久久久 | 国产两女互慰高潮视频在线观看 | 欧美性生交活xxxxxdddd | 日韩无套无码精品 | 最近免费中文字幕中文高清百度 | 精品国产乱码久久久久乱码 | 国产精品无码一区二区桃花视频 | 精品国产一区二区三区四区在线看 | 亚洲国产精品毛片av不卡在线 | 一二三四社区在线中文视频 | 色婷婷久久一区二区三区麻豆 | 亚洲精品一区二区三区四区五区 | 亚洲国产精品无码久久久久高潮 | 国产九九九九九九九a片 | 亚洲无人区午夜福利码高清完整版 | 免费无码一区二区三区蜜桃大 | 国产精品久久久久久久9999 | 成人免费视频一区二区 | 亚洲乱码日产精品bd | 亚洲娇小与黑人巨大交 | 成人欧美一区二区三区黑人免费 | 六十路熟妇乱子伦 | 美女扒开屁股让男人桶 | 中文字幕精品av一区二区五区 | 中文无码精品a∨在线观看不卡 | 国产精品无码一区二区桃花视频 | 鲁鲁鲁爽爽爽在线视频观看 | 成人精品一区二区三区中文字幕 | 波多野结衣av一区二区全免费观看 | 成人亚洲精品久久久久软件 | 少妇久久久久久人妻无码 | 四虎影视成人永久免费观看视频 | 狠狠噜狠狠狠狠丁香五月 | 中文毛片无遮挡高清免费 | 欧美黑人乱大交 | 久久熟妇人妻午夜寂寞影院 | 色一情一乱一伦 | 日本www一道久久久免费榴莲 | 精品国产av色一区二区深夜久久 | 玩弄中年熟妇正在播放 | 亚洲午夜久久久影院 | 成人无码视频免费播放 | 高清不卡一区二区三区 | 亚洲国产av精品一区二区蜜芽 | 麻豆人妻少妇精品无码专区 | 免费观看黄网站 | 久久99精品国产麻豆 | 亚洲啪av永久无码精品放毛片 | 装睡被陌生人摸出水好爽 | 国产一区二区三区精品视频 | 免费人成在线观看网站 | 国产精品办公室沙发 | 国产亚洲日韩欧美另类第八页 | 纯爱无遮挡h肉动漫在线播放 | 日韩人妻少妇一区二区三区 | 中文字幕久久久久人妻 | 日本www一道久久久免费榴莲 | 中文字幕乱码人妻无码久久 | 久久99精品国产麻豆 | 国产熟女一区二区三区四区五区 | 综合网日日天干夜夜久久 | 日产精品高潮呻吟av久久 | 一本久道高清无码视频 | 精品久久综合1区2区3区激情 | 精品欧洲av无码一区二区三区 | 亚洲国产精华液网站w | 久久精品国产一区二区三区 | 99久久精品无码一区二区毛片 | 色一情一乱一伦一视频免费看 | 天堂无码人妻精品一区二区三区 | 成人片黄网站色大片免费观看 | 国产人妻精品午夜福利免费 | 亚洲成a人片在线观看无码 | 97夜夜澡人人双人人人喊 | 六月丁香婷婷色狠狠久久 | 午夜理论片yy44880影院 | 人人妻人人澡人人爽欧美一区 | 日韩亚洲欧美中文高清在线 | 国产亚洲精品久久久ai换 | 老熟妇仑乱视频一区二区 | 日韩欧美成人免费观看 | 成人免费视频一区二区 | 日本熟妇大屁股人妻 | 国产亚洲精品久久久久久国模美 | 一本无码人妻在中文字幕免费 | 久久久久久国产精品无码下载 | 亚洲a无码综合a国产av中文 | 欧美日本日韩 | 精品偷自拍另类在线观看 | 亚洲成av人在线观看网址 | 国产精品无码一区二区三区不卡 | а√天堂www在线天堂小说 | 99久久精品国产一区二区蜜芽 | а天堂中文在线官网 | 亚洲一区二区三区无码久久 | 国产精品久久久久久久9999 | 亚洲s色大片在线观看 | 午夜理论片yy44880影院 | 高清不卡一区二区三区 | 六月丁香婷婷色狠狠久久 | 77777熟女视频在线观看 а天堂中文在线官网 | 国内揄拍国内精品人妻 | 风流少妇按摩来高潮 | 久久精品人人做人人综合试看 | 国产精品久久久午夜夜伦鲁鲁 | 亚洲一区二区三区 | 樱花草在线社区www | 国产免费无码一区二区视频 | 久久精品一区二区三区四区 | 国产97人人超碰caoprom | 亚洲精品午夜无码电影网 | 三上悠亚人妻中文字幕在线 | 日韩视频 中文字幕 视频一区 | 蜜桃视频韩日免费播放 | 无码精品人妻一区二区三区av | 久久人人97超碰a片精品 | 国产suv精品一区二区五 | 免费人成网站视频在线观看 | 日韩精品无码一区二区中文字幕 | 欧美第一黄网免费网站 | 人妻互换免费中文字幕 | 精品久久久久久人妻无码中文字幕 | 国产成人无码av在线影院 | 欧美日韩一区二区免费视频 | 亚洲人成影院在线观看 | 亚洲精品无码人妻无码 | 亚洲а∨天堂久久精品2021 | 免费观看的无遮挡av | 人妻少妇精品视频专区 | 亚洲毛片av日韩av无码 | 九九综合va免费看 | 领导边摸边吃奶边做爽在线观看 | 一二三四社区在线中文视频 | 四虎国产精品免费久久 | 欧洲精品码一区二区三区免费看 | 国产无遮挡吃胸膜奶免费看 | 亚洲综合久久一区二区 | 人妻与老人中文字幕 | 奇米影视888欧美在线观看 | 午夜福利电影 | 精品夜夜澡人妻无码av蜜桃 | 久久成人a毛片免费观看网站 | 久9re热视频这里只有精品 | 久久综合久久自在自线精品自 | 亚洲国产欧美国产综合一区 | 亚洲无人区午夜福利码高清完整版 | 色狠狠av一区二区三区 | 亚洲精品久久久久久一区二区 | 天堂无码人妻精品一区二区三区 | 国产精品无码一区二区三区不卡 | 精品国产成人一区二区三区 | 国内少妇偷人精品视频 | 又大又黄又粗又爽的免费视频 | 任你躁在线精品免费 | 国产亚洲精品久久久久久久 | 国产熟妇另类久久久久 | 日本高清一区免费中文视频 | 成人一在线视频日韩国产 | 久久国产精品_国产精品 | 3d动漫精品啪啪一区二区中 | 国产明星裸体无码xxxx视频 | 又粗又大又硬毛片免费看 | 国产一区二区三区四区五区加勒比 | 无码人妻丰满熟妇区五十路百度 | 国产人妻人伦精品1国产丝袜 | 无码人妻出轨黑人中文字幕 | 国精产品一区二区三区 | 无码精品国产va在线观看dvd | 人人妻人人澡人人爽欧美一区 | 欧洲欧美人成视频在线 | 国产色视频一区二区三区 | 国产精品美女久久久久av爽李琼 | 亚洲人成人无码网www国产 | 国产精品18久久久久久麻辣 | 丰满岳乱妇在线观看中字无码 | 国产性生交xxxxx无码 | 欧美猛少妇色xxxxx | 丝袜人妻一区二区三区 | 欧美午夜特黄aaaaaa片 | 亚洲欧洲无卡二区视頻 | 久9re热视频这里只有精品 | 大肉大捧一进一出视频出来呀 | 两性色午夜视频免费播放 | 噜噜噜亚洲色成人网站 | 亚洲欧洲中文日韩av乱码 | 日韩精品无码免费一区二区三区 | 性色欲情网站iwww九文堂 | 久久人妻内射无码一区三区 | 久久久久久a亚洲欧洲av冫 | 国内综合精品午夜久久资源 | 又大又紧又粉嫩18p少妇 | 久久国产精品偷任你爽任你 | 国产偷国产偷精品高清尤物 | 丝袜美腿亚洲一区二区 | 亚洲乱码日产精品bd | 99久久婷婷国产综合精品青草免费 | 夜夜躁日日躁狠狠久久av | 六十路熟妇乱子伦 | 久久99精品久久久久婷婷 | 精品亚洲成av人在线观看 | 丰满少妇高潮惨叫视频 | 99国产精品白浆在线观看免费 | 乱人伦人妻中文字幕无码 | 无码一区二区三区在线 | 国产免费无码一区二区视频 | 国产一精品一av一免费 | 中文无码精品a∨在线观看不卡 | 国产乱子伦视频在线播放 | 波多野42部无码喷潮在线 | 中文字幕人妻丝袜二区 | 国产无遮挡又黄又爽免费视频 | 熟女少妇在线视频播放 | 大色综合色综合网站 | 久久99精品国产.久久久久 | 毛片内射-百度 | 性欧美牲交在线视频 | 无码人中文字幕 | 亚洲呦女专区 | 日韩欧美中文字幕在线三区 | 亚洲日本在线电影 | 国产精品久久久久无码av色戒 | 奇米影视7777久久精品 | 午夜福利电影 | 一二三四社区在线中文视频 | 97无码免费人妻超级碰碰夜夜 | 东京无码熟妇人妻av在线网址 | 亚洲精品国产精品乱码不卡 | 国产精品成人av在线观看 | 国产乱子伦视频在线播放 | 亚洲欧洲中文日韩av乱码 | 国产内射爽爽大片视频社区在线 | 日本xxxx色视频在线观看免费 | 纯爱无遮挡h肉动漫在线播放 | 麻豆国产97在线 | 欧洲 | 国产综合色产在线精品 | 亚洲日本va午夜在线电影 | 国产欧美精品一区二区三区 | 色窝窝无码一区二区三区色欲 | 麻豆成人精品国产免费 | 日韩精品无码一本二本三本色 | 欧美熟妇另类久久久久久不卡 | 亚洲欧美精品aaaaaa片 | 久久亚洲国产成人精品性色 | 亚洲欧美中文字幕5发布 | 亚洲欧美国产精品专区久久 | 纯爱无遮挡h肉动漫在线播放 | 久久99精品久久久久久动态图 | 欧美熟妇另类久久久久久多毛 | 亚洲一区av无码专区在线观看 | 亚洲中文字幕在线无码一区二区 | 综合人妻久久一区二区精品 | 少妇性荡欲午夜性开放视频剧场 | 强辱丰满人妻hd中文字幕 | 又大又黄又粗又爽的免费视频 | 老司机亚洲精品影院无码 | 俺去俺来也www色官网 | 久久久久免费看成人影片 | 大色综合色综合网站 | 亚洲欧美日韩国产精品一区二区 | 亚洲成av人影院在线观看 | 99久久99久久免费精品蜜桃 | 图片小说视频一区二区 | 狠狠cao日日穞夜夜穞av | 国产精品久久久久无码av色戒 | 三上悠亚人妻中文字幕在线 | 精品人妻中文字幕有码在线 | 亚洲熟妇色xxxxx亚洲 | 大地资源网第二页免费观看 | 国产明星裸体无码xxxx视频 | 国产亚洲精品久久久久久国模美 | 十八禁真人啪啪免费网站 | 亚洲国产精品无码久久久久高潮 | 精品一区二区三区波多野结衣 | 亚洲成熟女人毛毛耸耸多 | 丰满少妇熟乱xxxxx视频 | 国产色精品久久人妻 | 99久久婷婷国产综合精品青草免费 | 亚洲国产一区二区三区在线观看 | 亚洲熟妇色xxxxx亚洲 | 在线精品亚洲一区二区 | 色综合视频一区二区三区 | 亚洲精品综合五月久久小说 | 精品人妻人人做人人爽夜夜爽 | 久久国产精品精品国产色婷婷 | 女人被爽到呻吟gif动态图视看 | 色综合久久久无码中文字幕 | 国产无套粉嫩白浆在线 | 风流少妇按摩来高潮 | 亚洲精品久久久久avwww潮水 | 免费人成在线视频无码 | 久久精品国产一区二区三区 | 国产内射老熟女aaaa | 国产亚洲美女精品久久久2020 | 亚洲国产精品一区二区美利坚 | 中文字幕av日韩精品一区二区 | 国产精品人妻一区二区三区四 | 国产欧美熟妇另类久久久 | 水蜜桃色314在线观看 | 兔费看少妇性l交大片免费 | 老熟女重囗味hdxx69 | 高清无码午夜福利视频 | 日韩在线不卡免费视频一区 | 久久精品人人做人人综合试看 | 熟女俱乐部五十路六十路av | 国产香蕉97碰碰久久人人 | 亚洲精品国产精品乱码不卡 | 国产在线无码精品电影网 | 久久久久久av无码免费看大片 | 亚洲中文字幕无码中字 | 国产av一区二区精品久久凹凸 | 亚洲小说春色综合另类 | 亚洲国产午夜精品理论片 | 青春草在线视频免费观看 | 九月婷婷人人澡人人添人人爽 | 国产亚洲日韩欧美另类第八页 | 久久精品人人做人人综合试看 | 狂野欧美性猛xxxx乱大交 | 国内少妇偷人精品视频免费 | 亚洲欧美日韩成人高清在线一区 | 国产免费久久久久久无码 | 中文字幕日产无线码一区 | 久久99精品久久久久久动态图 | 国产欧美精品一区二区三区 | 国产黑色丝袜在线播放 | 成人综合网亚洲伊人 | 午夜精品久久久久久久久 | 久久国产精品二国产精品 | 风流少妇按摩来高潮 | 亚洲国产精品毛片av不卡在线 | 亚洲色欲久久久综合网东京热 | 亚洲人亚洲人成电影网站色 | 黑人巨大精品欧美黑寡妇 | 最近的中文字幕在线看视频 | 人妻熟女一区 | 亚洲伊人久久精品影院 | 欧洲熟妇精品视频 | 高潮毛片无遮挡高清免费视频 | 性欧美熟妇videofreesex | 国产色精品久久人妻 | 黑人巨大精品欧美一区二区 | 亚洲天堂2017无码中文 | 狠狠色色综合网站 | 精品国产一区二区三区四区在线看 | 亚洲成a人片在线观看日本 | 午夜时刻免费入口 | 久久久久久久久888 | 亚洲日韩av一区二区三区中文 | 午夜精品久久久久久久 | 久久人人爽人人爽人人片av高清 | 搡女人真爽免费视频大全 | 色综合久久久无码网中文 | 国产va免费精品观看 | 国产三级精品三级男人的天堂 | 97久久精品无码一区二区 | 国产精品沙发午睡系列 | 牲交欧美兽交欧美 | av小次郎收藏 | 色综合久久久久综合一本到桃花网 | 老子影院午夜伦不卡 | 少妇性俱乐部纵欲狂欢电影 | 无码乱肉视频免费大全合集 | 亚洲精品一区二区三区大桥未久 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 中文字幕乱码人妻无码久久 | 曰韩无码二三区中文字幕 | 亚洲日本在线电影 | 国产精品美女久久久久av爽李琼 | 色综合天天综合狠狠爱 | 国产免费久久精品国产传媒 | 亚洲精品一区国产 | 日欧一片内射va在线影院 | 大肉大捧一进一出视频出来呀 | 国内精品久久久久久中文字幕 | 亚洲一区二区三区偷拍女厕 | 国产熟妇高潮叫床视频播放 | 中文字幕乱码人妻二区三区 | 欧美精品无码一区二区三区 | 亚洲自偷精品视频自拍 | 亚洲乱码中文字幕在线 | 久久精品国产一区二区三区 | 中文字幕无码av激情不卡 | 国产高清不卡无码视频 | 久久久精品456亚洲影院 | 亚洲成av人综合在线观看 | 国产成人无码午夜视频在线观看 | 自拍偷自拍亚洲精品10p | 美女黄网站人色视频免费国产 | 无码毛片视频一区二区本码 | 3d动漫精品啪啪一区二区中 | 中文字幕无码日韩专区 | 午夜无码人妻av大片色欲 | 久久午夜无码鲁丝片 | 中文字幕日产无线码一区 | 一本精品99久久精品77 | 55夜色66夜色国产精品视频 | 久久无码中文字幕免费影院蜜桃 | 国产精品无套呻吟在线 | 成人免费视频视频在线观看 免费 | 天海翼激烈高潮到腰振不止 | 国产午夜福利100集发布 | 狠狠亚洲超碰狼人久久 | a在线亚洲男人的天堂 | 东京热无码av男人的天堂 | 国产疯狂伦交大片 | 无码国产激情在线观看 | 日日碰狠狠躁久久躁蜜桃 | 中文久久乱码一区二区 | 国产熟妇高潮叫床视频播放 | 午夜无码人妻av大片色欲 | 美女极度色诱视频国产 | 麻豆人妻少妇精品无码专区 | 中文字幕无码视频专区 | 国产手机在线αⅴ片无码观看 | 激情内射日本一区二区三区 | 久久99久久99精品中文字幕 | 高清不卡一区二区三区 | 日本大香伊一区二区三区 | 国产在线一区二区三区四区五区 | 国产色xx群视频射精 | 无码人妻精品一区二区三区不卡 | 中文字幕无线码免费人妻 | 亚洲综合无码一区二区三区 | 国产成人无码av在线影院 | 国产真实乱对白精彩久久 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 四虎4hu永久免费 | 国产亚洲精品久久久久久 | 性色欲网站人妻丰满中文久久不卡 | 漂亮人妻洗澡被公强 日日躁 | 亚洲日韩av一区二区三区四区 | 2019nv天堂香蕉在线观看 | 欧美熟妇另类久久久久久多毛 | 久久亚洲精品成人无码 | аⅴ资源天堂资源库在线 | 人人爽人人澡人人高潮 | 国产黄在线观看免费观看不卡 | 午夜性刺激在线视频免费 | 免费人成网站视频在线观看 | 少妇被黑人到高潮喷出白浆 | 99精品久久毛片a片 | 欧美肥老太牲交大战 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 黄网在线观看免费网站 | 国产精品多人p群无码 | 人人爽人人爽人人片av亚洲 | 天天爽夜夜爽夜夜爽 | 成在人线av无码免费 | 曰韩少妇内射免费播放 | 老太婆性杂交欧美肥老太 | 无码av最新清无码专区吞精 | 久久久精品欧美一区二区免费 | 色一情一乱一伦一视频免费看 | 粗大的内捧猛烈进出视频 | 少妇人妻偷人精品无码视频 | 99久久99久久免费精品蜜桃 | 亚洲人成影院在线无码按摩店 | 香蕉久久久久久av成人 | 丰满人妻一区二区三区免费视频 | 国产精品无码一区二区三区不卡 | 成人一在线视频日韩国产 | 精品人人妻人人澡人人爽人人 | 成人影院yy111111在线观看 | 日日天日日夜日日摸 | 天天躁夜夜躁狠狠是什么心态 | 日本一区二区三区免费播放 | 欧美三级不卡在线观看 | 天天拍夜夜添久久精品 | 亚洲精品国产精品乱码视色 | 丰满护士巨好爽好大乳 | 国产精品亚洲专区无码不卡 | 国产麻豆精品一区二区三区v视界 | 国产乱人无码伦av在线a | 亚洲国产精品美女久久久久 | 熟女俱乐部五十路六十路av | 初尝人妻少妇中文字幕 | 国内综合精品午夜久久资源 | 国产人妻精品午夜福利免费 | 日本丰满护士爆乳xxxx | 国产一区二区三区四区五区加勒比 | 国产成人综合在线女婷五月99播放 | 午夜男女很黄的视频 | 亚洲精品一区国产 | 国产乱人伦av在线无码 | 超碰97人人射妻 | 国内综合精品午夜久久资源 | 日韩av激情在线观看 | 亚洲中文字幕无码中字 | 色老头在线一区二区三区 | 精品无人区无码乱码毛片国产 | 精品人妻人人做人人爽夜夜爽 | 亚洲 欧美 激情 小说 另类 | 精品无人区无码乱码毛片国产 | 国产精品.xx视频.xxtv | 黑人大群体交免费视频 | 18禁黄网站男男禁片免费观看 | 377p欧洲日本亚洲大胆 | 国产人成高清在线视频99最全资源 | 国产乱人无码伦av在线a | 天天躁夜夜躁狠狠是什么心态 | 国产成人综合美国十次 | 国产美女精品一区二区三区 | 国产美女极度色诱视频www | 99精品视频在线观看免费 | 人人妻人人澡人人爽人人精品浪潮 | 国产综合色产在线精品 | 自拍偷自拍亚洲精品10p | 小泽玛莉亚一区二区视频在线 | 欧美日韩视频无码一区二区三 | 欧美freesex黑人又粗又大 | 国产精品久免费的黄网站 | 中文无码伦av中文字幕 | 精品国精品国产自在久国产87 | 亚洲精品欧美二区三区中文字幕 | 国产精品毛片一区二区 | 十八禁真人啪啪免费网站 | 国産精品久久久久久久 | 女人被男人爽到呻吟的视频 | 97夜夜澡人人双人人人喊 | 玩弄中年熟妇正在播放 | 中文字幕亚洲情99在线 | 乱人伦人妻中文字幕无码久久网 | 伊人久久大香线焦av综合影院 | 国产偷自视频区视频 | 久久久www成人免费毛片 | 领导边摸边吃奶边做爽在线观看 | 中文无码伦av中文字幕 | 日韩人妻无码一区二区三区久久99 | 激情亚洲一区国产精品 | 婷婷五月综合缴情在线视频 | 久久久亚洲欧洲日产国码αv | 麻豆国产丝袜白领秘书在线观看 | 99久久久无码国产精品免费 | 日产精品高潮呻吟av久久 | 久久99精品久久久久婷婷 | 日本精品少妇一区二区三区 | 日本一区二区更新不卡 | 欧美人与牲动交xxxx | 成人精品视频一区二区三区尤物 | 曰韩少妇内射免费播放 | 欧美 丝袜 自拍 制服 另类 | 色爱情人网站 | 亚洲国产精品久久人人爱 | 久久久久久a亚洲欧洲av冫 | 国产色xx群视频射精 | 国产精品视频免费播放 | 一区二区三区高清视频一 | 97人妻精品一区二区三区 | 成 人 网 站国产免费观看 | 女人高潮内射99精品 | 国产超级va在线观看视频 | 97精品国产97久久久久久免费 | 性欧美videos高清精品 | 国产亚洲精品久久久久久大师 | 中文字幕无线码免费人妻 | 狠狠躁日日躁夜夜躁2020 | 99视频精品全部免费免费观看 | 成人aaa片一区国产精品 | 中文字幕av日韩精品一区二区 | 亚洲日韩精品欧美一区二区 | 国产女主播喷水视频在线观看 | 97夜夜澡人人爽人人喊中国片 | 中文字幕无码免费久久9一区9 | 亚洲成av人片天堂网无码】 | 免费男性肉肉影院 | 无码任你躁久久久久久久 | 熟妇人妻无码xxx视频 | 亚洲爆乳大丰满无码专区 | 日本护士毛茸茸高潮 | 狠狠色丁香久久婷婷综合五月 | 人人妻人人澡人人爽人人精品浪潮 | 无码精品国产va在线观看dvd | 国产一区二区三区影院 | 亚洲综合另类小说色区 | 中文字幕人成乱码熟女app | 国产办公室秘书无码精品99 | 黑人巨大精品欧美黑寡妇 | 久久精品视频在线看15 | 性做久久久久久久免费看 | 亚洲s码欧洲m码国产av | 影音先锋中文字幕无码 | 亚洲男女内射在线播放 | 亚洲性无码av中文字幕 | 欧美精品在线观看 | 欧美 日韩 人妻 高清 中文 | 影音先锋中文字幕无码 | 一本久久伊人热热精品中文字幕 | 欧美老熟妇乱xxxxx | 激情五月综合色婷婷一区二区 | av无码不卡在线观看免费 | 人人澡人摸人人添 | 亚洲成av人在线观看网址 | www国产精品内射老师 | 精品偷拍一区二区三区在线看 | 成人无码精品1区2区3区免费看 | 国产成人无码av在线影院 | 中国女人内谢69xxxxxa片 | 亚洲精品成a人在线观看 | 国产精品国产自线拍免费软件 | 国产精品久久久久影院嫩草 | 国产人妻精品午夜福利免费 | 日本丰满熟妇videos | 久久亚洲精品成人无码 | 日本精品少妇一区二区三区 | 免费网站看v片在线18禁无码 | www一区二区www免费 | 欧美 丝袜 自拍 制服 另类 | 午夜丰满少妇性开放视频 | 在线观看国产午夜福利片 | 日韩少妇白浆无码系列 | 日本一本二本三区免费 | 在线播放免费人成毛片乱码 | 久久亚洲中文字幕精品一区 | 国内少妇偷人精品视频免费 | 久久国语露脸国产精品电影 | 欧美 丝袜 自拍 制服 另类 | 少妇太爽了在线观看 | a在线观看免费网站大全 | 亚洲精品午夜无码电影网 | 最新国产乱人伦偷精品免费网站 | 日日噜噜噜噜夜夜爽亚洲精品 | 精品aⅴ一区二区三区 | 国产日产欧产精品精品app | 国产成人无码区免费内射一片色欲 | 日韩av激情在线观看 | 久久久久久a亚洲欧洲av冫 | 中文字幕人妻无码一区二区三区 | 国产无套粉嫩白浆在线 | 久久婷婷五月综合色国产香蕉 | 国产午夜亚洲精品不卡下载 | 日本饥渴人妻欲求不满 | 伊人久久大香线蕉午夜 | 久久国产劲爆∧v内射 | 色一情一乱一伦一视频免费看 | 中文精品无码中文字幕无码专区 | 久久99精品久久久久久动态图 | 国产偷自视频区视频 | 欧美三级不卡在线观看 | 国产精品久久久久无码av色戒 | 精品无码一区二区三区爱欲 | a在线观看免费网站大全 | 东京热男人av天堂 | 亚洲gv猛男gv无码男同 | 欧美一区二区三区 | 日本欧美一区二区三区乱码 | 97色伦图片97综合影院 | 一二三四社区在线中文视频 | 中文字幕乱码人妻无码久久 | 欧美激情综合亚洲一二区 | 女人和拘做爰正片视频 | 少妇性俱乐部纵欲狂欢电影 | 国产精品成人av在线观看 | 亚洲精品成人av在线 | 成人aaa片一区国产精品 | 在线成人www免费观看视频 | 久久午夜夜伦鲁鲁片无码免费 | 国产黑色丝袜在线播放 | 久久婷婷五月综合色国产香蕉 | 欧美阿v高清资源不卡在线播放 | 国产综合色产在线精品 | a在线亚洲男人的天堂 | 丁香啪啪综合成人亚洲 | 亚洲中文字幕无码中字 | √天堂中文官网8在线 | 大屁股大乳丰满人妻 | 亚洲色欲色欲天天天www | 成 人影片 免费观看 | 久久精品国产一区二区三区 | 99国产精品白浆在线观看免费 | 老熟女乱子伦 | 伊人色综合久久天天小片 | 精品久久久久香蕉网 | 少妇被黑人到高潮喷出白浆 | 欧美人妻一区二区三区 | 国产免费久久久久久无码 | 任你躁在线精品免费 | 欧美猛少妇色xxxxx | 亚洲国精产品一二二线 | 5858s亚洲色大成网站www | 在线观看国产一区二区三区 | 国内精品一区二区三区不卡 | 色欲综合久久中文字幕网 | 国产精品毛片一区二区 | 久久人妻内射无码一区三区 | 国产情侣作爱视频免费观看 | 性做久久久久久久免费看 | 亚洲国产精品久久久天堂 | 一本久道久久综合婷婷五月 | 精品无码av一区二区三区 | 国产麻豆精品一区二区三区v视界 | 欧美喷潮久久久xxxxx | 亚洲阿v天堂在线 | 少妇高潮一区二区三区99 | 国产真人无遮挡作爱免费视频 | 久久99精品国产.久久久久 | 国产午夜无码精品免费看 | 一本久道久久综合婷婷五月 | 玩弄人妻少妇500系列视频 | 久热国产vs视频在线观看 | a在线亚洲男人的天堂 | 久久99精品久久久久久动态图 | 在线欧美精品一区二区三区 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 天天综合网天天综合色 | 国产一区二区三区日韩精品 | 激情内射亚州一区二区三区爱妻 | 熟妇人妻激情偷爽文 | 色狠狠av一区二区三区 | 亚洲 欧美 激情 小说 另类 | 亚洲狠狠婷婷综合久久 | 综合激情五月综合激情五月激情1 | 三上悠亚人妻中文字幕在线 | 午夜时刻免费入口 | 亚洲精品午夜国产va久久成人 | 国内揄拍国内精品少妇国语 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产亚洲精品久久久久久久 | 中文字幕人妻无码一区二区三区 | 综合人妻久久一区二区精品 | 亚洲成av人综合在线观看 | 伦伦影院午夜理论片 | 奇米影视888欧美在线观看 | 精品无码国产一区二区三区av | 蜜桃视频韩日免费播放 | √天堂中文官网8在线 | 野狼第一精品社区 | a国产一区二区免费入口 | 一本久久a久久精品亚洲 | 蜜桃视频插满18在线观看 | 中文字幕乱妇无码av在线 | 老子影院午夜伦不卡 | 狠狠综合久久久久综合网 | 夜精品a片一区二区三区无码白浆 | 丰满少妇高潮惨叫视频 | 国模大胆一区二区三区 | 欧美日本日韩 | 精品熟女少妇av免费观看 | 极品尤物被啪到呻吟喷水 | 国产在线无码精品电影网 | 一本无码人妻在中文字幕免费 | 国产偷国产偷精品高清尤物 | 又紧又大又爽精品一区二区 | 成人无码视频在线观看网站 | 狠狠cao日日穞夜夜穞av | 亚洲精品一区二区三区在线 | 一本无码人妻在中文字幕免费 | a国产一区二区免费入口 | 亚洲人成网站色7799 | 麻豆成人精品国产免费 | 妺妺窝人体色www在线小说 | 熟妇人妻激情偷爽文 | 在线播放无码字幕亚洲 | 牲欲强的熟妇农村老妇女视频 | 精品乱子伦一区二区三区 | 97夜夜澡人人双人人人喊 | 国产精品人人爽人人做我的可爱 | 1000部夫妻午夜免费 | 国产农村乱对白刺激视频 | 久久 国产 尿 小便 嘘嘘 | 好爽又高潮了毛片免费下载 | 免费人成在线观看网站 | 国产日产欧产精品精品app | 久久综合网欧美色妞网 | 波多野结衣一区二区三区av免费 | 中文字幕人妻无码一区二区三区 | 青草视频在线播放 | 婷婷六月久久综合丁香 | 国产亚洲精品久久久久久国模美 | 久久久精品456亚洲影院 | 男人的天堂av网站 | 一本色道婷婷久久欧美 | 一本久久伊人热热精品中文字幕 | 九九久久精品国产免费看小说 | 欧美日韩亚洲国产精品 | 国产又粗又硬又大爽黄老大爷视 | 波多野结衣av一区二区全免费观看 | 高潮喷水的毛片 | 精品国产aⅴ无码一区二区 | 少妇邻居内射在线 | 爆乳一区二区三区无码 | 无码人妻精品一区二区三区不卡 | 亚洲日韩精品欧美一区二区 | 国产真实乱对白精彩久久 | 国产又粗又硬又大爽黄老大爷视 | 青青久在线视频免费观看 | 国产 精品 自在自线 | 国产网红无码精品视频 | 国产网红无码精品视频 | 国产激情综合五月久久 | 色诱久久久久综合网ywww | 亚洲啪av永久无码精品放毛片 | 久久久久亚洲精品男人的天堂 | 又大又硬又爽免费视频 | 麻豆人妻少妇精品无码专区 | 久久久婷婷五月亚洲97号色 | 亚洲熟妇色xxxxx欧美老妇 | 欧美精品无码一区二区三区 | 亚拍精品一区二区三区探花 | 麻豆国产97在线 | 欧洲 | 无码av岛国片在线播放 | 欧美日韩一区二区三区自拍 | 永久免费精品精品永久-夜色 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 丰满肥臀大屁股熟妇激情视频 | 国产乡下妇女做爰 | 天堂一区人妻无码 | 日本大香伊一区二区三区 | 在线成人www免费观看视频 | 国色天香社区在线视频 | 一区二区三区高清视频一 | 麻豆国产人妻欲求不满谁演的 | 国产精品成人av在线观看 | 精品厕所偷拍各类美女tp嘘嘘 | 激情内射日本一区二区三区 | 欧美日韩一区二区免费视频 | 午夜福利试看120秒体验区 | 九九在线中文字幕无码 | 精品成人av一区二区三区 | √天堂资源地址中文在线 | 老熟女重囗味hdxx69 | 四虎影视成人永久免费观看视频 | 精品久久久无码中文字幕 | 亚洲高清偷拍一区二区三区 | 理论片87福利理论电影 | 欧美 日韩 人妻 高清 中文 | 国模大胆一区二区三区 | 欧美精品一区二区精品久久 | 亚洲区小说区激情区图片区 | 色综合天天综合狠狠爱 | 美女黄网站人色视频免费国产 | 97夜夜澡人人爽人人喊中国片 | 在线观看国产午夜福利片 | 亚洲最大成人网站 | 国内精品人妻无码久久久影院蜜桃 | 人妻体内射精一区二区三四 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 欧美性生交活xxxxxdddd | 成人欧美一区二区三区黑人 | aa片在线观看视频在线播放 | 色综合久久久无码中文字幕 | 无码任你躁久久久久久久 | 色老头在线一区二区三区 | 国产成人精品视频ⅴa片软件竹菊 | 国产片av国语在线观看 | 国产另类ts人妖一区二区 | 国产av一区二区三区最新精品 | 久久久久99精品国产片 | 欧美性生交活xxxxxdddd | 强伦人妻一区二区三区视频18 | 欧美性生交xxxxx久久久 | 国产人成高清在线视频99最全资源 | 人妻夜夜爽天天爽三区 | 欧美日韩色另类综合 | 国产又粗又硬又大爽黄老大爷视 | 国产区女主播在线观看 | 性做久久久久久久久 | 国产真实伦对白全集 | 青青草原综合久久大伊人精品 | 98国产精品综合一区二区三区 | 久热国产vs视频在线观看 | 日韩精品一区二区av在线 | 荫蒂被男人添的好舒服爽免费视频 | 精品久久8x国产免费观看 | 成人一在线视频日韩国产 | 午夜精品一区二区三区的区别 | 自拍偷自拍亚洲精品10p | 久久精品国产精品国产精品污 | 东京热一精品无码av | 草草网站影院白丝内射 | 日日夜夜撸啊撸 | 大胆欧美熟妇xx | www成人国产高清内射 | 牛和人交xxxx欧美 | 成人免费视频在线观看 | 综合网日日天干夜夜久久 | 中文精品久久久久人妻不卡 | 亚洲日本va午夜在线电影 | 在线观看国产一区二区三区 | 国产精品无码成人午夜电影 | 国产在热线精品视频 | 久久天天躁狠狠躁夜夜免费观看 | 波多野结衣av一区二区全免费观看 | 初尝人妻少妇中文字幕 | 亚洲国产日韩a在线播放 | 女人高潮内射99精品 | 精品一二三区久久aaa片 | 日韩精品无码免费一区二区三区 | 国产精品久久久久久亚洲影视内衣 | 成人女人看片免费视频放人 | 国产乱子伦视频在线播放 | 国产激情无码一区二区app | 久久无码中文字幕免费影院蜜桃 | 乱人伦中文视频在线观看 | 国产成人精品必看 | 亚洲国产精品久久久天堂 | 国产精品美女久久久久av爽李琼 | 亚洲乱亚洲乱妇50p | 欧美亚洲日韩国产人成在线播放 | 性开放的女人aaa片 | 强伦人妻一区二区三区视频18 | 在教室伦流澡到高潮hnp视频 | 奇米影视7777久久精品 | 欧美性猛交内射兽交老熟妇 | 自拍偷自拍亚洲精品被多人伦好爽 | 天天摸天天透天天添 | 四虎国产精品一区二区 | 天堂久久天堂av色综合 | 国产亚洲精品久久久闺蜜 | 性色av无码免费一区二区三区 | 国产真人无遮挡作爱免费视频 | 久久久精品456亚洲影院 | 亚洲成av人片在线观看无码不卡 | 亚洲高清偷拍一区二区三区 | 成人精品一区二区三区中文字幕 | 亚洲一区二区三区播放 | 久久亚洲a片com人成 | 天堂亚洲免费视频 | 久久国产劲爆∧v内射 | 亚洲七七久久桃花影院 | 国产成人av免费观看 | 国内精品久久毛片一区二区 | 一本久久a久久精品vr综合 | 狠狠噜狠狠狠狠丁香五月 | 亚洲va中文字幕无码久久不卡 | 丰满诱人的人妻3 | 日欧一片内射va在线影院 | 理论片87福利理论电影 | 亚洲精品午夜无码电影网 | 亚洲精品国偷拍自产在线麻豆 | 99riav国产精品视频 | 欧美真人作爱免费视频 | 日本www一道久久久免费榴莲 | 1000部啪啪未满十八勿入下载 | 久久zyz资源站无码中文动漫 | 欧美肥老太牲交大战 | 无套内射视频囯产 | 国产在线一区二区三区四区五区 | 亚洲一区av无码专区在线观看 | 亚洲欧洲日本综合aⅴ在线 | 欧美性生交xxxxx久久久 | 给我免费的视频在线观看 | 综合激情五月综合激情五月激情1 | 老太婆性杂交欧美肥老太 | 日本熟妇浓毛 | 福利一区二区三区视频在线观看 | 少妇性俱乐部纵欲狂欢电影 | 粉嫩少妇内射浓精videos | 久久人人爽人人人人片 | 国内精品人妻无码久久久影院 | 又粗又大又硬又长又爽 | 永久免费观看美女裸体的网站 | 国精品人妻无码一区二区三区蜜柚 | 日韩亚洲欧美精品综合 | 午夜丰满少妇性开放视频 | 日韩欧美中文字幕公布 | 久久精品国产一区二区三区肥胖 | а√天堂www在线天堂小说 | 国产精品无码mv在线观看 | 日本精品久久久久中文字幕 | 中文字幕日韩精品一区二区三区 | 无码人妻出轨黑人中文字幕 | 国产97人人超碰caoprom | 欧美国产日产一区二区 | 伊人久久大香线蕉亚洲 | 国产明星裸体无码xxxx视频 | 学生妹亚洲一区二区 | 精品国产一区二区三区四区 | 图片区 小说区 区 亚洲五月 | 中文字幕无线码 | 一本大道伊人av久久综合 | 久久人人爽人人爽人人片ⅴ | 丝袜人妻一区二区三区 | 国产一区二区三区日韩精品 | 色欲久久久天天天综合网精品 | 久久久婷婷五月亚洲97号色 | 精品国偷自产在线视频 | 丁香啪啪综合成人亚洲 | 成人三级无码视频在线观看 | 鲁鲁鲁爽爽爽在线视频观看 | 亚洲国产精品无码一区二区三区 | 久久精品国产日本波多野结衣 | 久久国产自偷自偷免费一区调 | 久久精品人人做人人综合试看 | 欧美日韩综合一区二区三区 | 美女极度色诱视频国产 | 久9re热视频这里只有精品 | 无码人妻精品一区二区三区下载 | 永久黄网站色视频免费直播 | 亚洲综合久久一区二区 | 免费无码肉片在线观看 | 久久国产36精品色熟妇 | 又粗又大又硬又长又爽 | 99riav国产精品视频 | 日韩亚洲欧美精品综合 | 性做久久久久久久久 | 精品无码国产自产拍在线观看蜜 | 狠狠色噜噜狠狠狠狠7777米奇 | 日本www一道久久久免费榴莲 | 亚洲爆乳无码专区 | 亚洲色www成人永久网址 | 国产精品亚洲lv粉色 | 午夜理论片yy44880影院 | 97精品人妻一区二区三区香蕉 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲精品中文字幕 | 免费乱码人妻系列无码专区 | 亚洲 欧美 激情 小说 另类 | 小泽玛莉亚一区二区视频在线 | 亚洲国产精品美女久久久久 | 丰满少妇熟乱xxxxx视频 | 18无码粉嫩小泬无套在线观看 | 动漫av网站免费观看 | 亚洲中文无码av永久不收费 | 奇米影视888欧美在线观看 | 国产69精品久久久久app下载 | 女人被爽到呻吟gif动态图视看 | 国产猛烈高潮尖叫视频免费 | 亚洲天堂2017无码中文 | 亚洲人成网站免费播放 | yw尤物av无码国产在线观看 | 亚洲国产精品一区二区美利坚 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产精品美女久久久久av爽李琼 | 高潮毛片无遮挡高清免费视频 | 国产性生大片免费观看性 | 樱花草在线播放免费中文 | 蜜桃无码一区二区三区 | 久久综合给久久狠狠97色 | 国产国产精品人在线视 | 5858s亚洲色大成网站www | 秋霞成人午夜鲁丝一区二区三区 | 日本乱偷人妻中文字幕 | 亚洲色欲久久久综合网东京热 | 亚洲精品无码国产 | 丰满人妻精品国产99aⅴ | 六十路熟妇乱子伦 | 曰韩无码二三区中文字幕 | 激情国产av做激情国产爱 | 午夜理论片yy44880影院 | 精品国产国产综合精品 | 澳门永久av免费网站 | 粗大的内捧猛烈进出视频 | 99国产欧美久久久精品 | 欧美丰满熟妇xxxx性ppx人交 | 大色综合色综合网站 | 久久久久99精品国产片 | 国产精品美女久久久 | 国产明星裸体无码xxxx视频 | 少妇无码av无码专区在线观看 | 成人亚洲精品久久久久软件 | 久在线观看福利视频 | √天堂资源地址中文在线 | 午夜精品一区二区三区的区别 |