青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

life02

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  197 隨筆 :: 3 文章 :: 37 評論 :: 0 Trackbacks

#

     摘要:   閱讀全文
posted @ 2011-12-15 22:28 life02 閱讀(443) | 評論 (0)編輯 收藏

     摘要:   閱讀全文
posted @ 2011-12-15 22:25 life02 閱讀(476) | 評論 (0)編輯 收藏

     摘要:   閱讀全文
posted @ 2011-12-15 22:13 life02 閱讀(209) | 評論 (0)編輯 收藏

     摘要:   閱讀全文
posted @ 2011-12-13 00:33 life02 閱讀(435) | 評論 (0)編輯 收藏

Android核心分析
 
 

Android 核心分析 之七------Service深入分析

上一章我們分析了Android IPC架構,知道了Android服務構建的一些基本理念和原理,本章我們將深入分析Android的服務。Android體系架構中三種意義上服務:

Native服務

Android服務

Init空間的服務,主要是屬性設置,這個IPC是利用Socket來完成的,這個我將在另外一章來討論。

Navite服務,實際上就是指完全在C++空間完成的服務,主要是指系統一開始初始化,通過Init.rc腳本起來的服務,例如Service Manger service,Zygote service,Media service , ril_demon service等。

Android服務是指在JVM空間完成的服務,雖然也要使用Navite上的框架,但是服務主體存在于Android空間。Android是二階段初始(Init2)初始化時建立的服務。

1 Service本質結構

我們還是從Service的根本意義分析入手,服務的本質就是響應客戶端請求。要提供服務,就必須建立接收請求,處理請求,應答客服端的框架。我想在Android Service設計者也會無時不刻把這個服務本質框圖掛在腦海中。從程序的角度,服務一定要存在一個閉合循環框架和請求處理框架

分析清楚服務框就必須弄清楚以下的機制及其構成。

(1)閉合循環結構放置在哪里?

(2)處理請求是如何分發和管理?

(3)處理框架是如何建立的?

(4)概念框架是如何建立的?

2 Service基本框架分析

Android設計中,Native Service和Android Service采用了同一個閉合循環框架。這個閉合循環框架放置在Native的C++空間中,,ProcessState@ProcessState.cpp 和IPCThreadState@IPCThreadState.cpp兩個類完成了全部工作。

在服務框架中,ProcessState是公用的部分,這個公用部分最主要的框架就是閉合循環框架和接收到從Binder來的請求后的處理框架。我們將服務框架用ProcessSate來表示,簡言之:

(1) addservice

(2) 建立閉合循環處理框架。

int main(int argc, char** argv)

{

sp<ProcessState> proc(ProcessState::self());

addService(String16("xxx0"), new xxx0Service());

addService(String16("xxx1"), new xxx1Service());

ProcessState::self()->startThreadPool();

IPCThreadState::self()->joinThreadPool();//閉合循環框架

}

2.1 Native Service

Native Service是在系統Init階段通過Init.rc腳本建立的服務。

首先來看看一個例子mediaserver@main_mediaserver.cpp的建立過程。

int main(int argc, char** argv)

{

sp<ProcessState> proc(ProcessState::self());

sp<IServiceManager> sm = defaultServiceManager();

LOGI("ServiceManager: %p", sm.get());

AudioFlinger::instantiate();

MediaPlayerService::instantiate();

CameraService::instantiate();

AudioPolicyService::instantiate();

ProcessState::self()->startThreadPool();

IPCThreadState::self()->joinThreadPool();

}

我們將代碼向下展開了一層,更能看到事物的本質。

int main(int argc, char** argv)

{

sp<ProcessState> proc(ProcessState::self());

sp<IServiceManager> sm = defaultServiceManager();

defaultServiceManager()->addService(String16("media.audio_flinger"), new AudioFlinger());

ProcessState::self()->startThreadPool();

IPCThreadState::self()->joinThreadPool();

}

(1)服務進程建立了ProcessState對象,并將給對象登記在進程的上下文中。

(2)建立一個新AudioFlinger對象,并將對象登記Service Manager Service中。

(3)開始就收請求,處理請求,應答這個循環閉合框架。

2.2 Android Service

Androids service是系統二階段(Init2)初始化時建立的服務。

Android的所有服務循環框架都是建立SystemServer@(SystemServer.java)上。在SystemServer.java中看不到循環結構,只是可以看到建立了init2的實現函數,建立了一大堆服務,并AddService到service Manager。

main() @ com/android/server/SystemServer

{

init1();

}

Init1()是在Native空間實現的(com_andoird_server_systemServer.cpp)。我們一看這個函數就知道了,原來這個閉合循環處理框架在這里:

init1->system_init() @System_init.cpp

在system_init()我們看到了這個久違的循環閉合管理框架。

{

Call "com/android/server/SystemServer", "init2"

…..

ProcessState::self()->startThreadPool();

IPCThreadState::self()->joinThreadPool();

}

Init2()@SystemServer.java中建立了Android中所有要用到的服務:

Entropy Service

Power Manager

Activity Manager

Telephony Registry

Package Manager

Account Manager

Content Manager

System Content Providers

Battery Service

Hardware Service

Alarm Manager

Init Watchdog

Sensor Service

Window Manager

Bluetooth Service

statusbar

Clipboard Service

Input Method Service

NetStat Service

Connectivity Service

Accessibility Manager

Notification Manager

Mount Service

Device Storage Monitor

Location Manager

Search Service

Checkin Service

Wallpaper Service

Audio Service

Headset Observer

Backup Service

AppWidget Service

3 ProcessState和IPCThreadState

從宏觀來講,PocessState及其IPCThreadState處于IPC與內核打交道包裝層。前面的章節已經提到,下面我將更詳細的分析。有關IPC的c++空間的實現都是從ProcessState這個對象完成的。

我們可以得出如下的結論:不管JVM的Binder做了多么復雜的操作,最終還是需要利用ProcessState 這個c++空間的對象把數據傳遞給Binder Driver,接收數據也是通過ProcessState這個對象完成,ProcessState是所有Binder IPC必經的通道。

ProcessState放置在全局變量gProcess中,每個進程只有一個ProcessState對象,負責打開Binder設備驅動,建立線程池等。而IPCThreadState每個線程有一個,IPCThreadState實例登記在Linux線程程的上下文附屬數據中,主要負責Binder數據讀取,寫入和請求處理框架。IPCThreadSate在構造的時候,獲取進程的ProcessSate并記錄在自己的成員變量mProcess中,通過mProcess可以獲取到Binder的句柄。

3.1 ProcessState的生命周期

既然ProcessState是Binder通訊的基礎,那么Process必須在Binder通訊之前建立??蛻舳?,服務端都必須建立。由于現在重點討論服務端,所以重心放置在服務端。在Android體系中有c++空間的服務,JVM空間的服務,這兩類服務在本質上相同的,只是形式上不同,由于他們都是建立在ProcessState這個基礎上,所以在形式上不同就僅僅表現在對OnTransact的回調處理的不同。

Native Service

我們直接可以看到使用sp<ProcessState> proc(ProcessState::self()),建立建立ProcessState,一旦調用ProcessState就建立了,并且這個self將ProcessSate登記在全局變量中。

Android Service

建立Android Service服務system_init @System_init.cpp中我們可以看到相同的結構。有一點不同的是所有的Android Service都運行在一個進程中:systemsever進程。

3.2 Binder Driver包裝 @IPCThreadState

ProcessSate構造的時候,使用open_binder打開/driver/binder,并將句柄記錄在mDriverFD,在ProcessState中并不使用這個句柄,真正使用這個Binder設備句柄的是IPCThreadState,所有關于Binder的操作放置在IPCThreadState中:

(1)讀取/寫入:talkWithDriver()@IPCThreadState對ioctl(mProcess->mDriverFD, BINDER_WRITE_READ, &bwr)進行包裝。

(2)請求處理:executeCommand(...)@ IPCThreadState

(3)循環結構:joinThreadPool()

joinThreadPool()

{

While(1){

talkWithDriver(...)

...

executeCommand(...)

}

}


posted @ 2011-12-08 11:38 life02 閱讀(399) | 評論 (0)編輯 收藏

     摘要:   閱讀全文
posted @ 2011-12-08 11:37 life02 閱讀(488) | 評論 (0)編輯 收藏

     摘要: Android軟件開發之獲取通訊錄聯系人信息(十二)http://www.uml.org.cn/mobiledev/201110121.asp   發布于2011-10-12   圖中選中的數據庫 contacts2.db就是系統儲存聯系人的數據庫,我們將它打開看看里面儲存了些什么東東? 打開contacts.db后...  閱讀全文
posted @ 2011-12-08 11:30 life02 閱讀(2279) | 評論 (0)編輯 收藏

     摘要:   閱讀全文
posted @ 2011-12-07 23:27 life02 閱讀(251) | 評論 (0)編輯 收藏

http://blog.csdn.net/louiswangbing/article/details/6607612

Intent妙用之編寫自己的android主界面

眾所周知,android的主界面名為 laucher2,功能強大,會在android啟動之后運行,也是所有其他應用程序的入口程序。那么,如何讓自己的應用程序取代laucher2的位 置,成為android系統的主界面呢?其實說出來很簡單,接下來,我就來為大家揭開這其中的神秘面紗。

首先,我們來看看一個普通的應用程序的intent聲明:

  1. <intent-filter>  
  2.              <action android:name="android.intent.action.MAIN" />  
  3.              <category android:name="android.intent.category.LAUNCHER" />  
  4.          </intent-filter>  
是不是看著很眼熟呢?沒錯了,這段代碼是在AndroidManifest.xml中相應activity的intent聲明,相信大家目前縮寫的應用程序的intent聲明無一例外都是這樣的吧??赡芎芏嗳硕紩χ鴥尚写a有下面的理解:

第二行<action android:name="android.intent.action.MAIN" />表示這個activity是當前應用程序的主activity,而第二行表示當前activity在lancher中加載。

這么理解的卻是沒錯,但事實上,有更加簡單的理解方式。這里請容許我先賣個關子。我們繼續往下看。

既然是想讓我們自己的應用程序取代laucher的位置,那么我們就來看一下lancher的intent聲明是怎么樣的吧:

  1. <intent-filter>  
  2.         <action android:name="android.intent.action.MAIN" />  
  3.         <category android:name="android.intent.category.HOME"/>  
  4.         <category android:name="android.intent.category.DEFAULT" />  
  5.         <category android:name="android.intent.category.MONKEY" />  
  6.     </intent-filter> 
當 然,想要看到這段代碼,你必須要有laucher的源代碼。(關于android源代碼的問題,前面的文章已經提到過很多次了,有源代碼真的是件很好的事 情,不管是對應用程序開發者來說還是對底層開發者來說亦或是對android愛好者來說,都會受益匪淺的,所以這里再次建議大家不要僅僅局限于 android sdk和avd的使用來進行應用程序的開發,不管你有沒有時間,下份源代碼總是沒有壞處的。)

大家看出這兩個intent聲明之間的差別了嗎?沒錯,當出現  <category android:name="android.intent.category.HOME"/>  的時候,我們的應用程序就會變成跟lancher具有相同功能的(當然,我指的僅僅是主界面,laucher的功能是在是太強大了),成為 android系統的主界面,并且,當我們按下Home鍵的時候,會出現一個選擇界面,是不是發現你的應用程序和laucher同時出現在了選擇框中呢? 如果是,那么恭喜你,從功能上來說,你已經實現了。如果沒有看到,請email我louiswangbing@gmail.com。

但是,所謂一山不容二虎,同時有兩個主界面存在當然不是我們想要的。

如 果你有android源代碼的話,你甚至可以把laucher刪掉,直接將你自己的應用程序編譯到android系統中,這樣,系統啟動的時候就會直接運 行你的應用程序,而你的應用程序就會堂而皇之地鳩占鵲巢,順理成章的成為系統的主界面,并且當你按下Home鍵的時候,就會跳到你的應用程序的主 activity了!!

如果你只是一個功能上的追求者,那么看到這里你就可以關掉這個頁面去試試上面的功能了。

如果你是一個好奇心比較強的人,那么請跟著我繼續往下看。

剛才我說過,intent聲明的理解問題。事實上,你可以有更好的理解方式,當然,這要建立在你對android系統的啟動進程有一定的了解的基礎上。

簡 單來說,intent其實就是一個條件過濾器,activity的intent聲明的每一條都可以作為一個過濾條件,條目越多,過濾條件也就越強,定位起 來也就越容易。相信這個原理學過數據庫的朋友理解起來更加容易。你可以將整個android系統中所有的activity都集中起來當成是一個數據庫,而 intent本身就是一條select語句,其中每一項聲明都是一項過濾條件,而過濾之后剩下的,就是將要被調用的activity。當過濾條件足夠強大 或者過濾條件比較特殊的時候,最后剩下的只有一個activity,那么系統會毫不猶豫地啟動它;當過濾條件不足導致過濾之后還剩下比較多的 activity的時候,系統會將滿足這些條件的所有的activity用一個listview列出來讓你選擇。

相信原理大家都已經很清楚了,那么上面所述的這個功能就很好理解了。沒錯,android在啟動的時候會有一個PackageManager選擇系統中滿足過濾條件:

  1. <action android:name="android.intent.action.MAIN" />  
  2.         <category android:name="android.intent.category.HOME"/>  
  3.         <category android:name="android.intent.category.DEFAULT" />  
  4.         <category android:name="android.intent.category.MONKEY" />  
的 activity作為系統啟動的第一個activity,也就是主界面,任何一個滿足這個過濾條件的activity都將進入候選名單,如果候選名單中僅 有一人,那么很榮幸,不戰而勝,你就是系統的主界面了;如果候選名單中有多個人(比如剛才說的有laucher和你自己的應用程序),那么就進入殘酷的” 民意選舉“,也就是用戶自己的選擇,你選誰系統就會啟動誰。但和民意選舉不同的是,選舉出來的結果通常會有一定的任期,而這個主界面的選舉任期非常的短, 每當你按下一次Home鍵或者重啟一下系統,系統就會重新安排一次”民意選舉“。如果想要永遠的成為主界面,那么唯一的辦法就是--沒錯,雖然很殘酷,但 不得不說--就是,干掉它......或者和諧一點,你可以讓它活著,但是也必須將它貶為庶民或者是將其發配邊疆,具體的實施手段就是--改掉它的 intent聲明,使其不滿足主界面的這個過濾條件。

在 整個intent妙用章節中,這一章算是比較特殊的,因為雖然所有的章節運用的原理基本相通,也就是我上面說到的原理,但是后續章節的intent過濾條 件都是可以由用戶自己定義、手動修改的,而唯獨只有這個是不能改的,你只能決定去適應或者不適應這個過濾條件,而不能去改變這個過濾條件,就像你只能去適 應這個社會,卻很難改變它--或許不是不能,而是暫時還能找到途徑......

有時候真的,生活跟計算機,居然有如此之多的相似之處......


posted @ 2011-12-07 23:26 life02 閱讀(392) | 評論 (0)編輯 收藏


http://blog.csdn.net/louiswangbing/article/details/6610936

Android開發組件——Intent

Intent提供了一種通用的消息系統,允許你的應用程序與其它的應用程序間傳遞Intent來執行動作和產生事件。通過使用Intent可以激活Android應用的三個核心組件:活動、服務和廣播接收器。

Intent 的意思是意圖,也就是說App通過Intent向android表達自己的意圖即想干什么,想啟動另一個Activity或者去調用其它的App等 等;Intentfilter反應了App對意圖的響應能力,比如書上的例子撥號程序,在自己的App中聲明一個Intentfilter對這個動作意圖 進行相應,這樣當我們按下撥號鍵時,android就會在所用的Intentfilter中找到合適的App來滿足。

¥  Intent的分類

Ø  顯示意圖

調用Intent.setComponent()或Intent.setClass()方法明確指定了組件名的Intent為顯示意圖,明確指定了Intent應該傳遞到哪個組件。

Ø  隱式意圖

沒有明確指定組件名的Intent為隱式意圖。Android系統會根據隱式意圖中設置的動作、類別、數據找到最適合的組件來處理這個意圖

¥  Intent究竟是什么

我 們可以將Intent看成是Activity通信的標準的。比如Intent中的內容告訴了系統激發Intent的Activity需要什么服務,而服務 者Activity應該滿足的條件。然后就是Android系統的事了,它負責找出符合條件的Activity服務者,并將Intent給 Activity服務者,然后這個Activity根據Intent中剩余的信息做出相應的操作。由上面可知,Intent包含兩部分信息:

Ø  Activity服務者的信息,這個是給Android用來找到合適Activity的。

Ø  Activity服務者要做什么操作的信息,這個是給Activity服務者用的。

¥  Intent

Android 中提供了Intent機制來協助應用間的交互與通訊,Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根據此 Intent的描述,負責找到對應的組件,將Intent傳遞給調用的組件,并完成組件的調用。Intent不僅可用于應用程序之間,也可用于應用程序內 部的Activity/Service之間的交互。因此,Intent在這里起著一個媒體中介的作用,專門提供組件互相調用的相關信息,實現調用者與被調 用者之間的解耦。

¥  Intent的屬性

Ø  Action

表示要執行的動作,當然也可以自定義動作,并可定義相應的Activity

來處理我們的自定義動作。

Ø  Data

也就是執行動作要操作的數據。Android中采用指向數據的一個URI

來表示。如在聯系人應用中,一個指向某聯系人的URI可能為:content://contacts/1。對于不同的動作,其URI數據的類型是不同的(可以設置type屬性指定特定類型數據),如ACTION_EDIT指定Data為文件URI,打電話為tel:URI,訪問網絡為http:URI,而由content provider提供的數據則為content:URIs。

 如果動作字段是ACTION_EDIT,數據字段包含將顯示用于編輯的文

檔的URI;如果動作時ACTION_CALL。數據字段將是一個tel:URI和將撥  打的號碼;如果動作是ACTION_VIEW,數據字段是一個http:URI,接收活動將被調用去下載和顯示URI指向的數據。

Ø  Type

數據類型,顯示指定Intent的數據類型(MIME)。一般Intent的數據

類型能夠根據數據本身進行判斷,但是通過設置這個屬性,可以強制采用顯式指定的類型而不再進行推導。

Ø  Category

被執行動作的附加信息。例如LAUNCHER_CATEGORY表示intent的接

受 者應該在Launcher中作為頂級應用出現;而ALTERNATIVE_CATEGORY表示當前的Intent是一系列的可選動作中的一個,這些動作 可以在同一數據上執行。Alternative表明,這個Activity可以變成OptionMenu,供其他Activity直接調用。

Ø  Component

指定Intent的目標組件的類名稱。通常Android會根據Intent中包含

的 其它屬性的信息,比如action、data/type、category進行查找,最終找到一個與之匹配的目標組件。但是,如果component這個 屬性有指定的話,將直接使用它指定的組件,而不再執行上述查找過程。指定了這個屬性以后,Intent的其它所有屬性都是可選的。

Ø  Extra

是其它所有附加信息的集合。使用extras可以為組件提供擴展信息,

比如,如果要執行“發送電子郵件”這個動作,可以將電子郵件的標題、正文等保存在extras里,傳給電子郵件發送組件。

Android需要解析的是那些隱式Intent,通過解析,將Intent映射給可以

處理此Intent的Activity、IntentReceiver或Service。Intent解析機制主要是通

過查找已注冊在AndroidManifest.xml中的所有IntentFilter及其中定義的Intent,

最終找到匹配的Intent。在這個解析過程中,Android是通過Intent的action、

type、category這三個屬性來進行判斷,判斷方法如下:

@  如果Intent指定了action,則目標組件的IntentFilter的action列表中就必須包含有這個action,否則就不能匹配。

@  如果Intent沒有提供type,系統將從data中得到數據類型。和action一樣,目標組件的數據類型列表中必須包含Intent的數據類型,否則不能匹配。

@  如果Intent中的數據不是content:類型的URI,而且Intent也沒有明確指定它的type,將根據Intent中數據的scheme(比 如http:或者mailto:)進行匹配。同上,Intent的scheme必須出現在目標組件的scheme列表中。

@  如果Intent指定了一個或多個category,這些類別必須全部出現在組件的類別列表中。比如Intent中包含了兩個類別:LAUNCHER_CATEGORY和ALTERNATIVE_CATEGORY,解析得到的目標組件必須至少包含這兩個類別。

當匹配一個intent到一個能夠處理數據的組件,通常知道數據的類型(它

的MIME 類型)和它的URI很重要。例如,一個組件能夠顯示圖像數據,不應該被調用去播放一個音頻文件。

 在許多情況下,數據類型能夠從URI中推測,特別是content:URIs,它表

示 位于設備上的數據且被內容提供者(content provider)控制。但是類型也能夠顯示地設置,setData()方法指定數據的URI,setType()指定MIME類 型,setDataAndType()指定數據的URI和MIME類型。通過getData()讀取URI,getType()讀取類型。

¥  Intent過濾器

活動、服務、廣播接收者為了告知系統能夠處理哪些隱式Intent,它們

可 以有一個或多個intent過濾器。每個過濾器描述組件的一種能力,即樂意接收的一組Intent。實際上,它篩掉不想要的Intents,也僅僅是不想 要的隱式Intents。一個顯示Intent總是能夠傳遞到它的目標組件,不管它包含什么;不考慮過濾器。但是一個隱式Intent,僅當它能夠通過組 件的過濾器之一才能夠傳遞給它。

一個組件能夠做的每一工作有獨立的過濾器,例如,記事本中的NoteEditer活動有兩個過濾器,一個是啟動一個指定的記錄,用戶可以查看和編輯;另一個是啟動一個新的、空的記錄,用戶能夠填充并保存。

一 個intent過濾器是一個IntentFilter類的實例。因為Android系統在啟動一個組件之前必須知道它的能力,但是intent過濾器通常 不在java代碼中設置,而是在應用程序的清單文件(AndroidManifest.xml)中設置。但是有一個例外,廣播接收者的過濾器通過調用 Context.registerReceiver()動態地注冊,它直接創建一個IntentFilter對象。

一 個過濾器有對應于Intent對象的動作、數據、種類的字段。過濾器要檢測隱式Intent的所有這三個字段,其中任何一個失敗,Android系統都不 會傳遞Intent給組件。然而,因為一個組件可以有多個Intent過濾器,一個Intent通不過組件的過濾器檢測,其它的過濾器可能通過檢測。

一個過濾器必須至少包含一個<action>子元素,否則它將阻塞所有的Intents。

要通過檢測,Intent對象中指定的動作必須匹配過濾器的動作列表中的一個。如果對象或過濾器沒有指定一個動作,結果將如下:

?   如果過濾器沒有指定動作,沒有一個Intent將匹配,所有的Intent將檢測失敗,即沒有intent能夠通過過濾器。

?   如果Intent對象沒有指定動作,將自動通過檢查(只要過濾器至少有一個過濾器,否則就是上面的情況了)

對于一個Intent要通過種類檢測,Intent對象中的每個種類必須匹配過

濾器中的一個。即過濾器能夠列出額外的種類,但是Intent對象中的種類都必須能夠在過濾器中找到,只有一個種類在過濾器列表中沒有,就算種類檢測失敗!

        因此原則上如果一個Intent對象中沒有種類(即種類字段為空)應該總

是 通過種類測試,而不管過濾器中有什么種類。但是有個例外,Android對待所有傳遞給Context.startActivity()的隱式 Intent好像它們至少包含”android.intent.category.DEFAULT”(對應CATEGORY_DEFAULT常量)。因 此,活動想要接收隱式Intent必須要在Intent過濾器中包含”android.intent.category.DEFAULT”。

      Intents對照著Intent過濾器匹配,不僅去發現一個目標組件去激活,而且

去 發現設備上的組件的其他信息。例如,Android系統填充應用程序啟動列表,最高層屏幕顯示用戶能夠啟動的應用程序:是通過查找所有的包含指定 了”android.intent.action.MAIN”的動作和”android.intent.category.LAUNCHER” 種         類的過濾器的活動,然后在活動列表中顯示這些活動的圖標和標簽。類似的,   它通過查找”android.intent.category.HOME”過濾器的活動發掘主菜單。

¥  Intent示例

要實現兩個Activity的跳轉,我們可以將要跳轉的Activity類名綁定到

Intent對象中,然后通過startActivity方法激活Intent對象中所指定的Activity,關鍵代碼如下:


posted @ 2011-12-07 23:25 life02 閱讀(371) | 評論 (0)編輯 收藏

僅列出標題
共20頁: First 8 9 10 11 12 13 14 15 16 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一级理论性理论a| 欧美午夜不卡| 一本色道久久综合亚洲91| 欧美第一黄色网| 国产精品国产三级欧美二区| 国产精品美女在线| 欧美日韩国产在线观看| 欧美日韩不卡一区| 国产精品免费看片| 国产在线精品一区二区夜色| 国产一在线精品一区在线观看| 韩国av一区二区三区| 亚洲黄一区二区三区| 亚洲美女av网站| 亚洲欧美日韩高清| 裸体歌舞表演一区二区| 亚洲精品国产视频| 亚洲美女在线看| 小嫩嫩精品导航| 免费一区二区三区| 国产精品影片在线观看| 亚洲大胆美女视频| 亚洲午夜av电影| 久久精品国产精品| 亚洲国产高潮在线观看| 亚洲一二三区精品| 免费久久久一本精品久久区| 国产精品女主播| 亚洲人午夜精品免费| 久久激情综合| 99精品视频免费观看视频| 久久噜噜亚洲综合| 国产精品丝袜久久久久久app | 欧美三级电影精品| 国产麻豆精品视频| avtt综合网| 男女激情久久| 亚洲欧美在线一区| 欧美网站在线| 亚洲美女视频在线观看| 麻豆精品在线播放| 性色av香蕉一区二区| 国产精品国产三级国产普通话蜜臀| 亚洲片国产一区一级在线观看| 久久午夜精品| 久久精品卡一| 国产一区二区视频在线观看| 午夜精品久久久久久久| 99re66热这里只有精品3直播| 模特精品在线| 亚洲电影av| 美女视频黄a大片欧美| 午夜精品亚洲| 国产性天天综合网| 欧美综合激情网| 亚洲欧美成人| 国产日本欧美一区二区三区| 午夜亚洲福利在线老司机| 亚洲视频日本| 国产女主播在线一区二区| 欧美一区二区三区免费观看视频 | 欧美午夜精品久久久久免费视| 国产一区亚洲一区| 久久精品女人| 午夜伦欧美伦电影理论片| 国产视频久久久久久久| 久久成人资源| 久久er精品视频| 在线观看日韩欧美| 裸体歌舞表演一区二区| 久久久国产精品一区二区三区| 国产欧美精品久久| 性色av一区二区三区| 亚洲一级网站| 国内精品久久久久久影视8| 久久乐国产精品| 久久国产高清| 黄色在线一区| 亚洲人成在线观看网站高清| 国产精品久久国产愉拍| 久久免费视频网| 男女精品网站| 亚洲尤物视频在线| 亚洲一区免费网站| 亚洲高清在线视频| 91久久精品一区二区别| 国产精品国产自产拍高清av王其| 久久久久久久一区二区| 欧美精品一区二区精品网| 午夜视频久久久久久| 美女图片一区二区| 亚洲欧美经典视频| 美女久久网站| 欧美一区二区三区精品电影| 你懂的国产精品永久在线| 亚洲影院免费观看| 久久综合久久综合这里只有精品| 日韩一级在线| 久久国产精品亚洲77777| 制服诱惑一区二区| 久久午夜精品| 性娇小13――14欧美| 麻豆精品在线观看| 久久精品成人一区二区三区| 欧美日本在线播放| 欧美成人一区在线| 欧美午夜国产| 欧美激情小视频| 国产亚洲激情视频在线| 9i看片成人免费高清| 亚洲国产成人在线视频| 午夜精品亚洲| 亚洲欧美综合国产精品一区| 欧美精品高清视频| 欧美不卡视频一区发布| 国产亚洲一区二区三区在线播放| 一本大道久久a久久综合婷婷 | 夜夜爽99久久国产综合精品女不卡 | 欧美一区二区精品| 久久激五月天综合精品| 老司机成人网| 国产亚洲福利| 欧美极品一区二区三区| 欧美激情综合色| 国产日产高清欧美一区二区三区| 日韩视频免费在线| 亚洲成色www久久网站| 久久香蕉国产线看观看av| 久久综合精品国产一区二区三区| 欧美大片在线观看一区二区| 亚洲视频在线播放| 免费在线播放第一区高清av| 国产精品二区三区四区| 性做久久久久久久免费看| 久久久久久久久蜜桃| 国产精品亚洲综合久久| 久久精品国产亚洲精品| 亚洲天堂免费观看| 欧美日韩一区二区欧美激情| 久久久久久穴| 国产精品久久久久久久久免费樱桃| 欧美性理论片在线观看片免费| 精品福利av| 久久国产一区二区三区| 日韩午夜精品| 国产欧美日韩视频一区二区| 亚洲日本久久| 99国产精品久久久| 久久久蜜桃精品| 国产精品久久久久一区二区三区| 亚洲欧美日韩精品综合在线观看| 欧美成人午夜视频| 亚洲午夜电影网| 亚洲欧美日韩专区| 国内精品国语自产拍在线观看| 久久一本综合频道| 欧美福利在线| 久久都是精品| 亚洲黄色一区二区三区| 久久先锋资源| 欧美成人黄色小视频| 国产主播喷水一区二区| 国产精品亚洲一区| 国产视频亚洲精品| 中日韩美女免费视频网址在线观看| 99re热这里只有精品免费视频| 亚洲精品日产精品乱码不卡| 午夜免费久久久久| 欧美一区二区视频观看视频| 美日韩免费视频| 久久国产日韩欧美| 欧美激情影音先锋| 欧美成人精品在线| 国产一区再线| 久久激情五月婷婷| 一本色道久久综合狠狠躁篇怎么玩| 亚洲欧美一区二区三区极速播放| 久久久五月婷婷| 国产精品啊啊啊| 亚洲午夜极品| 免费久久99精品国产自| 亚洲精品日韩一| 欧美三级网址| 日韩亚洲精品视频| 亚洲天堂av在线免费观看| 欧美黑人在线播放| 亚洲国产精品成人精品| 国产无一区二区| 亚洲精品久久久久久久久| 91久久夜色精品国产九色| 欧美成人精品在线观看| 欧美1级日本1级| 亚洲精品久久7777| 亚洲一级黄色片| 亚洲乱码国产乱码精品精98午夜| 欧美电影免费观看网站| 亚洲精品一二区| 欧美一级理论片| 国产精品二区二区三区| 久久国产精品高清|