久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Android ANR原理分析

瀏覽:127日期:2022-09-17 18:18:37
目錄卡頓原理卡頓監控ANR原理卡頓原理

主線程有耗時操作會導致卡頓,卡頓超過閥值,觸發ANR。 應用進程啟動時候,Zygote會反射調用ActivityThread的main方法,啟動loop循環。 ActivityThread(api29)

public static void main(String[] args) {Looper.prepareMainLooper();...Looper.loop();throw new RuntimeException('Main thread loop unexpectedly exited'); }

Looper的loop方法:

// 在線程中運行消息隊列。一定要調用public static void loop() {for (;;) { // 1、取消息 Message msg = queue.next(); // might block ... // This must be in a local variable, in case a UI event sets the logger // 2、消息處理前回調 final Printer logging = me.mLogging; if (logging != null) {logging.println('>>>>> Dispatching to ' + msg.target + ' ' +msg.callback + ': ' + msg.what); } ... // 3、消息開始處理 msg.target.dispatchMessage(msg); ... // 4、消息處理完回調 if (logging != null) {logging.println('<<<<< Finished to ' + msg.target + ' ' + msg.callback); }}}

loop中for循環存在,主線程可以長時間運行。在主線程執行任務,可以通過Handler post一個任務到消息隊列去,loop循環拿到msg,交給msg的target(Handler)處理。

可能導致卡頓兩個地方:

注釋1 queue.next() 注釋3 dispatchMessage耗時

MessageQueue.next 耗時代碼(api29)

@UnsupportedAppUsage Message next() {for (;;) { // 1、nextPollTimeoutMillis不為0則阻塞 nativePollOnce(ptr, nextPollTimeoutMillis); // 2、先判斷當前第一條消息是不是同步屏障消息, if (msg != null && msg.target == null) { // 3、遇到同步屏障消息,就跳過去取后面的異步消息來處理,同步消息相當于被設立了屏障 // Stalled by a barrier. Find the next asynchronous message in the queue. do {prevMsg = msg;msg = msg.next; } while (msg != null && !msg.isAsynchronous()); } // 4、正常消息處理,判斷是否延時 if (msg != null) { if (now < msg.when) {// Next message is not ready. Set a timeout to wake up when it is ready.nextPollTimeoutMillis = (int) Math.min(msg.when - now, Integer.MAX_VALUE); } else {// Got a message.mBlocked = false;if (prevMsg != null) { prevMsg.next = msg.next;} else { mMessages = msg.next;}msg.next = null;if (DEBUG) Log.v(TAG, 'Returning message: ' + msg);msg.markInUse();return msg; }} else { // 5、如果沒有取到異步消息,下次循環到注視1,nativePollOnce為-1,會一直阻塞 // No more messages. nextPollTimeoutMillis = -1;}} } MessageQueue是鏈表數據結構,判斷MessageQueue頭部(第一個消息)是不是同步屏障消息(給同步消息加一層屏障,讓同步消息不被處理,只會處理異步消息); 如果遇到同步屏障消息,就會跳過MessageQueue中同步消息,只會處理里面的異步消息來處理。如果沒有異步消息則到注釋5,nextPollTimeoutMillis為-1,下次循環調用注釋1的nativePollOnce就會阻塞; 如果looper能正常獲取消息,不論異步/同步消息,處理流程一樣,在注釋4,判斷是否延時,如果是,nextPollTimeoutMillis被賦值,下次調用注釋1的nativePollOnce就會阻塞一段時間。如果不是delay消息,直接返回msg,給handler處理。

next方法不斷從MessageQueue取消息,有消息就處理,沒有消息就調用nativePollOnce阻塞,底層是Linux的epoll機制,Linux IO多路復用。

Linux IO多路復用方案有select、poll、epoll。其中epoll性能最優,支持并發量最大。

select: 是操作系統提供的系統調用函數,可以把文件描述符的數組發給操作系統,操作系統去遍歷,確定哪個描述符可以讀寫,告訴我們去處理。 poll:和select主要區別,去掉了select只能監聽1024個文件描述符的限制。 epoll:針對select的三個可優化點進行改進。

1、內核中保持一份文件描述符集合,無需用戶每次重新傳入,只需要告訴內核修改部分。2、內核不再通過輪詢方式找到就緒的文件描述符,通過異步IO事件喚醒。3、內核僅會將有IO的文件描述符返回給用戶,用戶無需遍歷整個文件描述符集合。

同步屏障消息

Android App是無法直接調用同步消息屏障的,MessageQueue(api29)代碼

@TestApi public int postSyncBarrier() {return postSyncBarrier(SystemClock.uptimeMillis()); } private int postSyncBarrier(long when) {... }

系統高優先級的操作使用到同步屏障消息,例如:View繪制的時候ViewRootImpl的scheduleTraversals方法,插入同步屏障消息,繪制完成后移除同步屏障消息。ViewRootImpl api29

@UnsupportedAppUsage void scheduleTraversals() {if (!mTraversalScheduled) { mTraversalScheduled = true; mTraversalBarrier = mHandler.getLooper().getQueue().postSyncBarrier(); mChoreographer.postCallback( Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null); if (!mUnbufferedInputDispatch) {scheduleConsumeBatchedInput(); } notifyRendererOfFramePending(); pokeDrawLockIfNeeded();} }void unscheduleTraversals() {if (mTraversalScheduled) { mTraversalScheduled = false; mHandler.getLooper().getQueue().removeSyncBarrier(mTraversalBarrier); mChoreographer.removeCallbacks( Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null);} }

為了保證View的繪制過程不被主線程其他任務影響,View在繪制之前會先往MessageQueue插入同步屏障消息,然后再注冊Vsync信號監聽,Choreographer$FrameDisplayEventReceiver監聽接收vsync信號回調的。

private final class FrameDisplayEventReceiver extends DisplayEventReceiver implements Runnable { @Override public void onVsync(long timestampNanos, long physicalDisplayId, int frame) {Message msg = Message.obtain(mHandler, this);// 1、發送異步消息msg.setAsynchronous(true);mHandler.sendMessageAtTime(msg, timestampNanos / TimeUtils.NANOS_PER_MS); } @Override public void run() {// 2、doFrame優先執行doFrame(mTimestampNanos, mFrame); } }

收到Vsync信號回調,注釋1往主線程MessageQueue post一個異步消息,保證注釋2的doFrame優先執行。

doFrame才是View真正開始繪制的地方,會調用ViewRootIml的doTraversal、performTraversals,而performTraversals里面會調用View的onMeasure、onLayout、onDraw。

雖然app無法發送同步屏障消息,但是使用異步消息是允許的。

異步消息 SDK中限制了App不能post異步消息到MessageQueue中,Message類

@UnsupportedAppUsage /*package*/ int flags;

謹慎使用異步消息,使用不當,可能出現主線程假死。

Handler#dispatchMessage

/** * Handle system messages here. */ public void dispatchMessage(@NonNull Message msg) {if (msg.callback != null) { handleCallback(msg);} else { if (mCallback != null) {if (mCallback.handleMessage(msg)) { return;} } handleMessage(msg);} } Handler#post(Runnable r) 構造方法傳CallBack Handler重寫handlerMessage方法

應用卡頓,一般都是Handler處理消息太耗時導致的(方法本身、算法效率、cpu被搶占、內存不足、IPC超時等)

卡頓監控

卡頓監控方案一 Looper#loop

// 在線程中運行消息隊列。一定要調用public static void loop() {for (;;) { // 1、取消息 Message msg = queue.next(); // might block ... // This must be in a local variable, in case a UI event sets the logger // 2、消息處理前回調 final Printer logging = me.mLogging; if (logging != null) {logging.println('>>>>> Dispatching to ' + msg.target + ' ' +msg.callback + ': ' + msg.what); } ... // 3、消息開始處理 msg.target.dispatchMessage(msg); ... // 4、消息處理完回調 if (logging != null) {logging.println('<<<<< Finished to ' + msg.target + ' ' + msg.callback); }}}

注釋2和4的logging.println是api提供接口,可監聽Handler耗時,通過Looper.getMainLooper().setMessageLogging(printer),拿到消息前后的時間。監聽到卡頓后,dispatchMessage早已調用結束,堆棧不包含卡頓代碼。

定時獲取主線程堆棧,時間為key,堆棧信息為value,保存map中,發生卡頓,取出卡頓時間內的堆棧可行。適合線下使用。

logging.println存在字符串拼接,頻繁調用,創建大量對象,內存抖動。 后臺頻繁獲取主線程堆棧,對性能影響,獲取主線程堆棧,暫停主線程的運行。

卡頓監控方案二

對于線上卡頓監控,需要字節碼插樁技術。

通過Gradle Plugin+ASM,編譯期在每個方法開始和結束位置分別插入一行代碼,統計耗時。例如微信Matrix使用的卡頓監控方案。注意問題:

避免方法數暴增:分配獨立ID作為參數 過濾簡單函數:添加黑明單降低非必要函數統計

微信Matrix做大量優化,包體積增加1%~2%,幀率下降2幀以內,灰度包使用。

ANR原理 Service Timeout:前臺服務20s內未執行完成,后臺服務是10s BroadcastQueue Timeout:前臺廣播10s內執行完成,后臺60s ContentProvider Timeout:publish超時10s InputDispatching Timeout:輸入事件分發超過5s,包括按鍵和觸摸事件。

ActivityManagerService api29

// How long we allow a receiver to run before giving up on it. static final int BROADCAST_FG_TIMEOUT = 10*1000; static final int BROADCAST_BG_TIMEOUT = 60*1000;

ANR觸發流程

埋炸彈

后臺sevice調用:Context.startService--> AMS.startService--> ActiveService.startService--> ActiveService.realStartServiceLocked

private final void realStartServiceLocked(ServiceRecord r, ProcessRecord app, boolean execInFg) throws RemoteException {// 1、發送delay消息(SERVICE_TIMEOUT_MSG)bumpServiceExecutingLocked(r, execInFg, 'create');try { // 2、通知AMS創建服務 app.thread.scheduleCreateService(r, r.serviceInfo, mAm.compatibilityInfoForPackage(r.serviceInfo.applicationInfo), app.getReportedProcState());} }

注釋1內部調用scheduleServiceTimeoutLocked

void scheduleServiceTimeoutLocked(ProcessRecord proc) {if (proc.executingServices.size() == 0 || proc.thread == null) { return;}Message msg = mAm.mHandler.obtainMessage(ActivityManagerService.SERVICE_TIMEOUT_MSG);msg.obj = proc;// 發送delay消息,前臺服務是20s,后臺服務是200smAm.mHandler.sendMessageDelayed(msg,proc.execServicesFg ? SERVICE_TIMEOUT : SERVICE_BACKGROUND_TIMEOUT); }

注釋2通知AMS啟動服務前,注釋1發送handler延遲消息,20s內(前臺服務)沒有處理完,則ActiveServices#serviceTimeout被調用。

拆炸彈

啟動一個Service,先要經過AMS管理,然后AMS通知應用執行Service的生命周期,ActivityThread的handlerCreateService方法被調用。

@UnsupportedAppUsage private void handleCreateService(CreateServiceData data) {try { Application app = packageInfo.makeApplication(false, mInstrumentation); service.attach(context, this, data.info.name, data.token, app, ActivityManager.getService()); // 1、service onCreate調用 service.onCreate(); mServices.put(data.token, service); try {// 2、拆炸彈ActivityManager.getService().serviceDoneExecuting(data.token, SERVICE_DONE_EXECUTING_ANON, 0, 0); } catch (RemoteException e) {throw e.rethrowFromSystemServer(); }} }

注釋1,Service的onCreate方法被調用 注釋2,調用AMS的serviceDoneExecuting方法,最終會調用ActiveServices.serviceDoneExecutingLocked

private void serviceDoneExecutingLocked(ServiceRecord r, boolean inDestroying, boolean finishing) {//移除delay消息 mAm.mHandler.removeMessages(ActivityManagerService.SERVICE_TIMEOUT_MSG, r.app); }

onCreate調用后,就會移除delay消息,炸彈拆除。

引爆炸彈,假設Service的onCreate執行超過10s,那么炸彈就會引爆,也就是ActiveServices#serviceTimeout方法會被調用。api29

void serviceTimeout(ProcessRecord proc) {if (anrMessage != null) { proc.appNotResponding(null, null, null, null, false, anrMessage);}}

所有ANR,最終帶調用ProcessRecord的appNotResponding方法。api29

void appNotResponding(String activityShortComponentName, ApplicationInfo aInfo, String parentShortComponentName, WindowProcessController parentProcess, boolean aboveSystem, String annotation) {// 1、寫入event log// Log the ANR to the event log.EventLog.writeEvent(EventLogTags.AM_ANR, userId, pid, processName, info.flags, annotation);// 2、收集需要的log、anr、cpu等,放到StringBuilder中。// Log the ANR to the main log.StringBuilder info = new StringBuilder();info.setLength(0);info.append('ANR in ').append(processName);if (activityShortComponentName != null) { info.append(' (').append(activityShortComponentName).append(')');}info.append('n');info.append('PID: ').append(pid).append('n');if (annotation != null) { info.append('Reason: ').append(annotation).append('n');}if (parentShortComponentName != null&& parentShortComponentName.equals(activityShortComponentName)) { info.append('Parent: ').append(parentShortComponentName).append('n');}ProcessCpuTracker processCpuTracker = new ProcessCpuTracker(true);// 3、dump堆棧信息,包括java堆棧和native堆棧,保存到文件中// For background ANRs, don’t pass the ProcessCpuTracker to// avoid spending 1/2 second collecting stats to rank lastPids.File tracesFile = ActivityManagerService.dumpStackTraces(firstPids,(isSilentAnr()) ? null : processCpuTracker, (isSilentAnr()) ? null : lastPids,nativePids);String cpuInfo = null;// 4、輸出ANR日志Slog.e(TAG, info.toString());if (tracesFile == null) { // 5、沒有抓到tracesFile,發一個SIGNAL_QUIT信號 // There is no trace file, so dump (only) the alleged culprit’s threads to the log Process.sendSignal(pid, Process.SIGNAL_QUIT);}// 6、輸出到drapboxmService.addErrorToDropBox('anr', this, processName, activityShortComponentName,parentShortComponentName, parentPr, annotation, cpuInfo, tracesFile, null);synchronized (mService) { // 7、后臺ANR,直接殺進程 if (isSilentAnr() && !isDebugging()) {kill('bg anr', true);return; } // 8、錯誤報告 // Set the app’s notResponding state, and look up the errorReportReceiver makeAppNotRespondingLocked(activityShortComponentName, annotation != null ? 'ANR ' + annotation : 'ANR', info.toString()); // 9、彈出ANR dialog,會調用handleShowAnrUi方法 Message msg = Message.obtain(); msg.what = ActivityManagerService.SHOW_NOT_RESPONDING_UI_MSG; msg.obj = new AppNotRespondingDialog.Data(this, aInfo, aboveSystem); mService.mUiHandler.sendMessage(msg);} } 寫入event log 寫入main log 生成tracesFile 輸出ANR logcat(控制臺可以看到) 如果沒有獲取tracesFile,會發SIGNAL_QUIT信號,觸發收集線程堆棧信息流程,寫入traceFile 輸出到drapbox 后臺ANR,直接殺進程 錯誤報告 彈出ANR dialog 調用AppErrors#handleShowAnrUi方法。

ANR觸發流程,埋炸彈--》拆炸彈的過程啟動Service,onCreate方法調用之前會使用Handler延時10s的消息,Service的onCreate方法執行完,會把延遲消息移除掉。假如Service的onCreate方法耗時超過10s,延時消息就會被正常處理,觸發ANR,收集cpu、堆棧消息,彈ANR dialog

抓取系統的data/anr/trace.txt文件,但是高版本系統需要root權限才能讀取這個目錄。

ANRWatchDog github.com/SalomonBrys…

自動檢測ANR開源庫

以上就是Android ANR原理分析的詳細內容,更多關于Android ANR原理的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 一区二区三区在线播放视频 | 国偷自产av一区二区三区 | 香港三级日本三级a视频 | 一级色网站 | 国产成人精品高清久久 | 午夜欧美一区二区三区在线播放 | 在线视频第一页 | 日韩欧美一区二区三区久久婷婷 | 国产69精品久久久久观看黑料 | 狠狠干美女 | 亚洲精品成人av | 色爱综合网 | 天天操天天摸天天干 | 狠狠人人 | 亚洲欧美精品 | 天天操,夜夜操 | 9999久久久久 | 国产一区二区三区在线看 | 日日操av| 久久这里只有精品8 | 在线日韩 | 色播久久 | 国产精品99久久久久久久vr | 亚洲国产日韩在线 | 日本精品久久 | 国产精品成人在线视频 | 欧美日韩精品一区二区三区 | 一区二区三区四区在线播放 | 天天久久 | 国产成人激情 | 午夜影院在线观看 | 亚洲精品一区二区三区在线 | 粉色午夜视频 | 真人女人一级毛片免费播放 | 成人午夜免费视频 | 日韩欧美在线视频 | 一区二区三区在线免费观看 | 在线精品国产 | 色综合99| 欧美黑人一区 | 一二区视频| 亚洲成人综合网站 | 欧美一级免费在线观看 | 亚洲精品三级 | av大片| 久久久久久亚洲精品 | 欧美日韩精品一区二区在线播放 | 一区二区精品在线观看 | 午夜免费福利视频 | 美女视频久久 | 热re99久久精品国99热线看 | 亚洲高清资源 | 日韩欧美一区二区三区 | www国产精品| 午夜av电影院 | 天天草夜夜 | 国产视频久久 | 精品人人 | 高清国产一区二区三区四区五区 | 国产精品18久久久久久久久 | 免费在线色 | 亚洲成人久久久 | 国产自产才c区 | 久久久久久一区 | 久久久久中文字幕 | 国产丝袜视频 | 精品欧美一区二区三区久久久 | 欧美性一区二区三区 | 国产成人影院在线观看 | 久久综合一区二区 | 久久精品小视频 | 国产精品亚洲精品日韩已方 | 欧美人牲 | 亚洲成人中文字幕 | 日韩欧美国产一区二区 | www国产亚洲精品久久网站 | 三区在线观看 | 拍真实国产伦偷精品 | 999在线观看精品免费不卡网站 | 91精品国产人妻国产毛片在线 | 日本免费在线视频 | 欧美成人激情视频 | 国产精品久久嫩一区二区 免费 | 日韩精品一区二区三区免费观看视频 | 日韩www视频 | 亚洲高清在线观看 | 日韩一区二区三区在线观看 | 久久人人爽人人爽人人片av高清 | 精品国产欧美一区二区 | www.99re| 日韩一级视频 | 午夜看片 | 久久久久久久国产精品 | 欧美日本高清 | 成人av免费在线观看 | 亚洲网站在线观看 | 99国产精品久久久 | 日本在线视频一区 | 在线中文字幕视频 | www.av欧美| 干干日日 | 久久久久久久av | 亚洲精品在线播放 | 成人免费在线观看视频 | 一级电影免费看 | 九九久久久 | 三级在线观看 | 最新午夜 | japan23xxxxhd乱| 范冰冰一级做a爰片久久毛片 | 亚洲一区二区三区 | 国产精品不卡视频 | 国产高清视频在线 | 国产日韩欧美一区 | 成人a视频在线观看 | 一本色道久久综合狠狠躁篇的优点 | 日韩一区二区不卡 | 久久99精品久久久久久琪琪 | 最近中文字幕在线视频1 | 免费成人在线观看视频 | 天天看天天爽 | 国产精品久久久久久久久久99 | 国产亚洲精品精品国产亚洲综合 | 国产免费一区二区三区 | 国产精品网站在线看 | 午夜婷婷色 | 国产精品久久久久久久久久久新郎 | 欧美一区二区三区在线观看 | 一区二区三区在线视频播放 | 男女羞羞视频免费观看 | 密色视频| 久久黄网 | 青草青草久热精品视频在线观看 | 91丁香婷婷综合久久欧美 | 国产单男| 男人的天堂亚洲 | 成人免费xxx在线观看 | av中文字幕网 | 性色在线 | 成人不卡 | 国产中文一区二区三区 | 国产在线视频网 | 天堂一区二区三区四区 | 中文字幕一区在线观看视频 | 美女午夜影院 | 日韩成人免费 | 亚洲久久久久久 | 99精品视频在线 | 一区二区中文字幕 | 欧美成在线视频 | 久久亚洲二区 | 欧美日韩精品一区二区 | 成人av免费在线观看 | 亚洲成人在线观看视频 | av免费观看网页 | 国产成年免费视频 | 麻豆av电影在线观看 | 狠狠操夜夜爱 | 在线成人www免费观看视频 | 精品国产乱码久久久久久闺蜜 | 天天干天天操 | 午夜一区二区三区 | 日本高清中文字幕 | 久草免费福利 | 永久av| 成人欧美一区二区三区白人 | 美女一区二区三区四区 | a在线免费观看 | 中文字幕一区在线 | 亚洲视频在线观看一区二区三区 | 国产人成免费视频 | 婷五月综合 | 中文字幕亚洲精品 | 一区二区国产精品 | 涩涩视频在线免费看 | 午夜精品一区二区三区免费视频 | 成人免费淫片aa视频免费 | 一区二区三区在线 | 国产综合视频在线观看 | 亚洲国产一区二区三区四区 | 国产精品久久久久久久久久 | 欧美精品在线一区 | 午夜大片在线观看 | 国产一区二区三区在线看 | 91精品视频在线播放 | 国产精品毛片一区二区 | 精品欧美激情在线观看 | 成人精品在线观看 | 日韩中文字幕无码一区二区三区 | 亚洲高清视频在线观看 | 看黄色.com| 欧美精品成人一区二区在线 | 亚洲国内精品 | 综合国产| 欧美日本高清视频 | 亚洲免费在线观看 | 亚洲三级不卡 | 中文字幕免费在线观看 | 免费看91 | 日韩免费片 | 亚洲一区二区三区视频免费观看 | 91精品国产综合久久精品 | 成人欧美一区二区三区在线播放 | 91中文字幕在线 | 国产精品久久久久久福利一牛影视 | 亚洲日本乱码在线观看 | 一级片黄片毛片 | 国产综合亚洲精品一区二 | 久爱国产 | 国产精品久久久久久久久久久久久久 | 九色av| 国产综合精品 | 在线观看亚洲a | 伊人网影院 | 91久久精品日日躁夜夜躁国产 | 三区在线 | 精品99久久久久久 | 久久久婷 | 黄色小视频在线观看 | 久草热视频 | 国产91在线播放精品 | 久久加勒比 | 欧美日韩一区二区三 | 午夜亚洲电影 | 久久99国产精品久久99大师 | 97精品超碰一区二区三区 | 日韩精品在线播放 | 久久国产精品首页 | 国产中文字幕一区二区三区 | 亚洲精品一区二区三区四区高清 | 国产精品污www在线观看 | 久久久久国产一级毛片高清版小说 | 久久91精品国产 | 亚洲精品国品乱码久久久久 | 精品欧美乱码久久久久久 | 国产欧美精品 | 欧美精品一区二区在线观看 | 国产日韩亚洲欧美 | 91在线视频免费观看 | 亚洲视频免费观看 | 久久久精品国产 | 成人影院一区二区三区 | 激情一区 | 色在线看 | 91看片官网 | 久久久日韩精品一区二区三区 | 欧美xxxx做受欧美 | 欧美日韩一区二区在线 | 日韩精品视频在线观看一区二区 | 中文字幕日韩av | 7777av| 亚洲品质自拍视频网站 | 91在线免费看 | 国产成人91 | 99精品热视频 | 精品三级在线观看 | 国产欧美日韩综合精品一区二区 | 成人精品视频在线观看 | 国产中文字幕在线 | 成年免费观看视频 | 日本精品一区二区在线观看 | 欧美精品网站 | 日本在线观看视频一区 | 久久韩国| 久久亚洲美女 | 亚洲欧美少妇 | 亚洲高清在线视频 | 国产精品久久久久久久久久99 | 久久这里只有精品8 | 国内成人精品2018免费看 | 国产高清一级 | 日韩一区二区三区av | 国产在线欧美 | 久久伊人久久 | 精品国产精品三级精品av网址 | 国产精品一区二区三区免费视频 | 免费毛片网站 | 欧美日韩综合精品 | 精品成人免费一区二区在线播放 | 亚洲成人伦理 | 成人欧美一区二区三区黑人孕妇 | 成人久久久 | 免费v片| 99久久婷婷国产综合精品 | 欧美精品乱码久久久久久按摩 | 久久9精品 | 久久亚洲综合 | 国产精品久久久久久久久免费丝袜 | 久久久久国产一级毛片高清版小说 | 天堂欧美城网站 | 91精品久久久久久久久久久久久久久 | 青青草免费在线视频 | 欧美一级特黄aaaaaa大片在线观看 | 国产精品久久久久久久久久久新郎 | 日韩精品日韩激情日韩综合 | 91高清视频在线观看 | 国产午夜手机精彩视频 | 久久99精品久久久噜噜最新章节 | 成人在线一区二区三区 | 综合色婷婷一区二区亚洲欧美国产 | 亚洲欧美日韩另类一区二区 | 91精品一区 | 成人一区二区三区在线 | 国产精选久久 | 日本精品视频在线播放 | 狠狠操综合网 | 国产黄色免费小视频 | a级性生活 | 91精品国产综合久久福利软件 | va在线观看 | 日本二区在线播放 | 亚洲人在线观看视频 | 亚洲一区二区三区四区的 | 91人人 | 午夜精品视频 | 国产激情视频 | 青青草91在线视频 | 在线观看亚洲精品视频 | 91在线一区二区 | 日韩成人在线视频 | 99精品欧美一区二区三区综合在线 | 日本不卡视频 | 中文字幕 国产精品 | 亚洲欧美激情另类 | 国产激情视频在线观看 | 亚洲成人首页 | 欧美一级在线免费观看 | 亚洲精选久久 | 精品国产一区二区三区四 | 国产小视频在线观看 | 久久久久国产一区 | 亚洲区视频在线 | 亚洲国产精品第一区二区 | 久草久| 毛片网免费 | 国产精品久久久久久久久久99 | 啪一啪| 亚洲欧美中文日韩v在线观看 | 欧美高清视频一区 | 久久爱www. | 夸克满天星在线观看 | 色约约精品免费看视频 | 日韩欧美一级片 | 国产一级做a爰片在线看免费 | 久久久亚洲成人 | 国产成人福利 | 成人涩涩网站 | 日本三级在线观看网站 | 中文字幕亚洲欧美日韩在线不卡 | 国产三区精品 | 电影午夜精品一区二区三区 | 国产免费一区二区 | 午夜性电影 | 亚洲av毛片一区二二区三三区 | 欧美一级艳情片免费观看 | 国产亚洲综合一区二区 | 国产精品久久久久久久久久妞妞 | 海外中文字幕在线观看 | 草草视频在线免费观看 | 久草视| 国产精品入口久久 | 免费观看国产视频在线 | 99热这里有精品 | 日韩在线成人 | 久久中文视频 | 狠狠操夜夜操天天操 | 久久久久久久久久国产 | 综合一区 | 偷拍自拍网站 | 中文字幕在线观看www | 欧美一区二区三区视频 | 影音先锋亚洲精品 | 在线看亚洲 | 黄色在线免费观看 | 成人黄色av | 亚洲精品视频免费 | 日韩中文在线视频 | 欧美成年黄网站色视频 | 蜜桃av在线播放 | 精品久久久久久国产 | 成人午夜免费视频 | 久久精品日 | 免费成人高清 | 伊人在线 | 欧美久久免费 | 欧美日韩免费一区二区三区 | 国产丝袜一区二区三区免费视频 | 午夜精品久久久久99蜜 | 91资源在线 | 91资源在线观看 | 欧美精品三区 | 福利影院在线观看 | 欧美精品1区2区3区 欧美视频在线一区 | 久久99精品视频 | 天天干天天插 | 日本高清视频一区二区三区 | 中文字幕精品一区 | 精品福利av导航 | 在线日韩视频 | 黄色的视频免费 | av一二三四| 干干干操操操 | 国产精品久久国产精品 | 国产精品视频免费看 | 国产成人在线视频 | 久久精品免费电影 | 天天爽视频 | www,四虎| 成人久久久 | 人人草人人 | 另类久久 | 91精品国产综合久久国产大片 | 热99这里只有精品 | 国产精品乱码一区二区三区 | 成人精品视频在线观看 | 亚洲九九| 成人在线视频网址 | 日韩在线视频观看 | 亚洲高清不卡视频 | 国产精品入口久久 | 国产精品亚洲一区二区三区 | www成人精品 | 国产成人精品久久二区二区91 | 亚洲精品a | 国产偷国产偷精品高清尤物 | 久久青| 亚洲永久免费视频 | 麻豆精品国产传媒 | xnxx 美女19| 99在线视频播放 | 日韩在线一区二区三区 | 欧美亚洲视频 | 亚洲欧美激情精品一区二区 | 久久久国产精品入口麻豆 | 北条麻妃一区二区三区中文字幕 | 黄色一级网站视频 | 国产成人午夜高潮毛片 | 成人欧美一区二区三区在线播放 | 亚洲黄页 | www.色在线 | 日韩福利在线 | 99久久精品一区二区 | 日韩成人一区 | 久久精品国产一区 | 国产一区二区精品 | 国产一区二区免费 | 三级在线观看 | 欧美成人a∨高清免费观看 在线视频成人 | 国产精品久久一区 | 欧美一区视频 | 丝袜 亚洲 另类 欧美 综合 | 毛片国产 | av女人的天堂 | 久久青 | 黄色毛片免费看 | 欧美在线观看一区 | 午夜寂寞少妇aaa片毛片 | 亚洲一区中文 | 一区二区日韩在线观看 | 国产a久久精品一区二区三区 | 精品无码久久久久国产 | 亚洲毛片在线 | 午夜激情在线观看 | 国产欧美在线观看 | 久久久成人网 | 麻豆毛片 | 久久色av | 欧美在线不卡 | 欧美三级影院 | 亚洲欧美精选 | 亚洲一区不卡 | 欧美成人精品一区二区三区 | 午夜激情av | 国产一区在线不卡 | 91精品国产综合久久福利软件 | 色性av| 亚洲国产精品一区二区www | 成人免费看黄色 | 午夜小视频在线观看 | 最新超碰 | 国产一级视频 | 中文字幕最新在线 | 国产精品视频免费看 | 日韩一区在线观看视频 | 99国产精品99久久久久久 | 久久久综合网 | 久久国产精品免费一区二区三区 | 免费视频一区 | 视频二区在线观看 | 色婷婷亚洲一区二区三区 | 一区二区三区精品视频 | 久久久免费av | 夜夜夜夜夜操 | 午夜影院毛片 | 成人免费视频网站在线观看 | 国产成人一区 | 国产特级毛片aaaaaa毛片 | 国产大奶视频 | 亚洲精品免费在线观看 | 狠狠爱www人成狠狠爱综合网 | 国产精品成av人在线视午夜片 | 日韩视频一区在线观看 | 久久九九精品视频 | h视频免费看 | 亚洲一二三区在线观看 | 99在线看 | 欧美日韩一区二区三区在线观看 | 欧美亚洲成人一区 | the蜜臀av入口 | 精品国产一区二区在线 | 亚洲天堂色2017 | 日韩精品视频在线观看免费 | 久久国内精品 | 日日做夜夜爽毛片麻豆 | 成人在线高清视频 | 久久久免费av | chengrenzaixian| 狠狠se | 羞羞视频免费网站 | 欧美性吧 | 国产大奶视频 | 日韩欧美国产精品一区二区三区 | 久久久精品网站 | 艹逼网 | 欧美精品一区三区 | 欧美日韩一级视频 | 午夜日韩在线观看 | 人人做人人澡人人爽欧美 | 久久精品亚洲 | 免费一级 国产 | 91电影在线看 | 欧美亚洲视频 | 伊人网视频在线观看 | 精品国产91亚洲一区二区三区www | 欧美成人一区二区 | 九色视频在线播放 | 久久亚洲欧美日韩精品专区 | 国产农村妇女精品久久 | 91高清在线 | 亚洲精品在线播放 | 国产精品视频免费播放 | av成人免费在线观看 | 久久久中文字幕 | 日本精品一区 | 亚洲精品乱码8久久久久久日本 | 天天插天天操 | 久久99精品视频 | 六月丁香av | 久久精品这里热有精品 | 亚洲一区二区精品 | 91资源在线观看 | 亚洲成av人片在线观看无码 | 精品久久久久久国产三级 | 亚洲一区二区三区视频 | 欧洲亚洲视频 | 天天精品 | 人人精久 | 欧美日韩一区电影 | 亚洲精品免费视频 | 国产精品亚洲天堂 | 99国产精品久久久久久久 | 妞干网国产 | 99r精品在线 | 久久精品国产久精国产 | 国产午夜精品久久久久免费视高清 | 精品亚洲永久免费精品 | 中文字幕本久久精品一区 | 欧美激情欧美激情在线五月 | 久久精品国产91精品亚洲高清 | 国产精品久久久久久亚洲调教 | 亚洲不卡在线 | 一级片在线观看 | 婷婷av在线 | 国产综合精品一区二区三区 | 日韩成人在线视频 | 午夜精品久久久久 | 欧美成人h版在线观看 | 天天干人人 | av日韩在线播放 | 激情亚洲 | 蜜桃精品久久久久久久免费影院 | 欧美精品第一页 | av在线毛片 | 久久久久九九九九 | 精品一区二区在线观看 | 日韩亚洲视频 | 日韩中文字幕在线视频 | 午夜视频在线观看网址 | 国产精品久久一区二区三区 | 狠狠爱网站 | 天天看天天爽 | 中国大陆高清aⅴ毛片 | 精品久久国产 | 欧美精品网站 | 欧美自拍视频 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 久久一区视频 | jizz在线播放 | 欧美午夜在线观看 | 久久999| 国产99一区 | 成人影院欧美黄色 | 国产免费观看一区二区三区 | 欧美综合一区二区 | 视频成人免费 | 欧美久久久久久久久久久久久久 | 91性高湖久久久久久久久网站 | 精品国产一区二区三区四 | 国产精品永久免费视频 | 九热精品 | 欧美精品一区二 | 黄色免费av | 精品九九 | 一级黄色毛片子 | 中国大陆高清aⅴ毛片 |