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

life02

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  197 隨筆 :: 3 文章 :: 37 評(píng)論 :: 0 Trackbacks

轉(zhuǎn)載必須注明出處 :http://blog.csdn.net/qinjuning

 

 

             前言:本文是我讀《Android內(nèi)核剖析》第7章 后形成的讀書(shū)筆記 ,在此向欲了解Android框架的書(shū)籍推薦此書(shū)。

 

 

 

 

        大家好,  今天給大家介紹下我們?cè)趹?yīng)用開(kāi)發(fā)中最熟悉而陌生的朋友-----Context類(lèi) ,說(shuō)它熟悉,是應(yīng)為我們?cè)陂_(kāi)發(fā)中

   時(shí)刻的在與它打交道,例如:Service、BroadcastReceiver、Activity等都會(huì)利用到Context的相關(guān)方法 ; 說(shuō)它陌生,完全是

   因?yàn)槲覀冋嬲牟欢瓹ontext的原理、類(lèi)結(jié)構(gòu)關(guān)系。一個(gè)簡(jiǎn)單的問(wèn)題是,一個(gè)應(yīng)用程序App中存在多少個(gè)Context實(shí)例對(duì)象呢?

   一個(gè)、兩個(gè)? 在此先賣(mài)個(gè)關(guān)子吧。讀了本文,相信您會(huì)豁然開(kāi)朗的 。

 

      Context,中文直譯為“上下文”,SDK中對(duì)其說(shuō)明如下:

         Interface to global information about an application environment. This is an abstract class whose implementation

  is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls 

  for application-level operations such as launching activities, broadcasting and receiving intents, etc

 

    從上可知一下三點(diǎn),即:

        1、它描述的是一個(gè)應(yīng)用程序環(huán)境的信息,即上下文。

        2、該類(lèi)是一個(gè)抽象(abstract class)類(lèi),Android提供了該抽象類(lèi)的具體實(shí)現(xiàn)類(lèi)(后面我們會(huì)講到是ContextIml類(lèi))。

        3、通過(guò)它我們可以獲取應(yīng)用程序的資源和類(lèi),也包括一些應(yīng)用級(jí)別操作,例如:?jiǎn)?dòng)一個(gè)Activity,發(fā)送廣播,接受Intent

      信息 等。。

 

 

   于是,我們可以利用該Context對(duì)象去構(gòu)建應(yīng)用級(jí)別操作(application-level operations) 。

 

 一、Context相關(guān)類(lèi)的繼承關(guān)系

 

                         

 

  相關(guān)類(lèi)介紹:

 

   Context類(lèi)    路徑: /frameworks/base/core/java/android/content/Context.java

            說(shuō)明:  抽象類(lèi),提供了一組通用的API。

      源代碼(部分)如下:   

  1. public abstract class Context {  
  2.      ...  
  3.      public abstract Object getSystemService(String name);  //獲得系統(tǒng)級(jí)服務(wù)  
  4.      public abstract void startActivity(Intent intent);     //通過(guò)一個(gè)Intent啟動(dòng)Activity  
  5.      public abstract ComponentName startService(Intent service);  //啟動(dòng)Service  
  6.      //根據(jù)文件名得到SharedPreferences對(duì)象  
  7.      public abstract SharedPreferences getSharedPreferences(String name,int mode);  
  8.      ...  
  9. }  

 

  ContextIml.java類(lèi)  路徑 :/frameworks/base/core/java/android/app/ContextImpl.java

          說(shuō)明:該Context類(lèi)的實(shí)現(xiàn)類(lèi)為ContextIml,該類(lèi)實(shí)現(xiàn)了Context類(lèi)的功能。請(qǐng)注意,該函數(shù)的大部分功能都是直接調(diào)用

      其屬性mPackageInfo去完成,這點(diǎn)我們后面會(huì)講到。    

         源代碼(部分)如下:

  1. /** 
  2.  * Common implementation of Context API, which provides the base 
  3.  * context object for Activity and other application components. 
  4.  */  
  5. class ContextImpl extends Context{  
  6.     //所有Application程序公用一個(gè)mPackageInfo對(duì)象  
  7.     /*package*/ ActivityThread.PackageInfo mPackageInfo;  
  8.       
  9.     @Override  
  10.     public Object getSystemService(String name){  
  11.         ...  
  12.         else if (ACTIVITY_SERVICE.equals(name)) {  
  13.             return getActivityManager();  
  14.         }   
  15.         else if (INPUT_METHOD_SERVICE.equals(name)) {  
  16.             return InputMethodManager.getInstance(this);  
  17.         }  
  18.     }   
  19.     @Override  
  20.     public void startActivity(Intent intent) {  
  21.         ...  
  22.         //開(kāi)始啟動(dòng)一個(gè)Activity  
  23.         mMainThread.getInstrumentation().execStartActivity(  
  24.             getOuterContext(), mMainThread.getApplicationThread(), null, null, intent, -1);  
  25.     }  
  26. }  

 


 

  ContextWrapper類(lèi) 路徑 :\frameworks\base\core\java\android\content\ContextWrapper.java

        說(shuō)明: 正如其名稱(chēng)一樣,該類(lèi)只是對(duì)Context類(lèi)的一種包裝,該類(lèi)的構(gòu)造函數(shù)包含了一個(gè)真正的Context引用,即ContextIml

       對(duì)象。    源代碼(部分)如下:

  1. public class ContextWrapper extends Context {  
  2.     Context mBase;  //該屬性指向一個(gè)ContextIml實(shí)例,一般在創(chuàng)建Application、Service、Activity時(shí)賦值  
  3.       
  4.     //創(chuàng)建Application、Service、Activity,會(huì)調(diào)用該方法給mBase屬性賦值  
  5.     protected void attachBaseContext(Context base) {  
  6.         if (mBase != null) {  
  7.             throw new IllegalStateException("Base context already set");  
  8.         }  
  9.         mBase = base;  
  10.     }  
  11.     @Override  
  12.     public void startActivity(Intent intent) {  
  13.         mBase.startActivity(intent);  //調(diào)用mBase實(shí)例方法  
  14.     }  
  15. }  

 


 

   ContextThemeWrapper類(lèi) 路徑:/frameworks/base/core/java/android/view/ContextThemeWrapper.java

      說(shuō)明:該類(lèi)內(nèi)部包含了主題(Theme)相關(guān)的接口,即android:theme屬性指定的。只有Activity需要主題,Service不需要主題,

   所以Service直接繼承于ContextWrapper類(lèi)。

      源代碼(部分)如下:

  1. public class ContextThemeWrapper extends ContextWrapper {  
  2.      //該屬性指向一個(gè)ContextIml實(shí)例,一般在創(chuàng)建Application、Service、Activity時(shí)賦值  
  3.        
  4.      private Context mBase;  
  5.     //mBase賦值方式同樣有一下兩種  
  6.      public ContextThemeWrapper(Context base, int themeres) {  
  7.             super(base);  
  8.             mBase = base;  
  9.             mThemeResource = themeres;  
  10.      }  
  11.   
  12.      @Override  
  13.      protected void attachBaseContext(Context newBase) {  
  14.             super.attachBaseContext(newBase);  
  15.             mBase = newBase;  
  16.      }  
  17. }  

 

 

     Activity類(lèi) 、Service類(lèi) 、Application類(lèi)本質(zhì)上都是Context子類(lèi), 更多信息大家可以自行參考源代碼進(jìn)行理解。

 

 

二、 什么時(shí)候創(chuàng)建Context實(shí)例 

 

      熟悉了Context的繼承關(guān)系后,我們接下來(lái)分析應(yīng)用程序在什么情況需要?jiǎng)?chuàng)建Context對(duì)象的?應(yīng)用程序創(chuàng)建Context實(shí)例的

 情況有如下幾種情況:

      1、創(chuàng)建Application 對(duì)象時(shí), 而且整個(gè)App共一個(gè)Application對(duì)象

      2、創(chuàng)建Service對(duì)象時(shí)

      3、創(chuàng)建Activity對(duì)象時(shí)

 

    因此應(yīng)用程序App共有的Context數(shù)目公式為:

 

                     總Context實(shí)例個(gè)數(shù) = Service個(gè)數(shù) + Activity個(gè)數(shù) + 1(Application對(duì)應(yīng)的Context實(shí)例)

 

  具體創(chuàng)建Context的時(shí)機(jī)

 

     1、創(chuàng)建Application對(duì)象的時(shí)機(jī)

 

       每個(gè)應(yīng)用程序在第一次啟動(dòng)時(shí),都會(huì)首先創(chuàng)建Application對(duì)象。如果對(duì)應(yīng)用程序啟動(dòng)一個(gè)Activity(startActivity)流程比較

清楚的話(huà),創(chuàng)建Application的時(shí)機(jī)在創(chuàng)建handleBindApplication()方法中,該函數(shù)位于 ActivityThread.java類(lèi)中 ,如下:

  1. //創(chuàng)建Application時(shí)同時(shí)創(chuàng)建的ContextIml實(shí)例  
  2. private final void handleBindApplication(AppBindData data){  
  3.     ...  
  4.     ///創(chuàng)建Application對(duì)象  
  5.     Application app = data.info.makeApplication(data.restrictedBackupMode, null);  
  6.     ...  
  7. }  
  8.   
  9. public Application makeApplication(boolean forceDefaultAppClass, Instrumentation instrumentation) {  
  10.     ...  
  11.     try {  
  12.         java.lang.ClassLoader cl = getClassLoader();  
  13.         ContextImpl appContext = new ContextImpl();    //創(chuàng)建一個(gè)ContextImpl對(duì)象實(shí)例  
  14.         appContext.init(this, null, mActivityThread);  //初始化該ContextIml實(shí)例的相關(guān)屬性  
  15.         ///新建一個(gè)Application對(duì)象   
  16.         app = mActivityThread.mInstrumentation.newApplication(  
  17.                 cl, appClass, appContext);  
  18.        appContext.setOuterContext(app);  //將該Application實(shí)例傳遞給該ContextImpl實(shí)例           
  19.     }   
  20.     ...  
  21. }  

 

 

    2、創(chuàng)建Activity對(duì)象的時(shí)機(jī)

 

       通過(guò)startActivity()或startActivityForResult()請(qǐng)求啟動(dòng)一個(gè)Activity時(shí),如果系統(tǒng)檢測(cè)需要新建一個(gè)Activity對(duì)象時(shí),就會(huì)

  回調(diào)handleLaunchActivity()方法,該方法繼而調(diào)用performLaunchActivity()方法,去創(chuàng)建一個(gè)Activity實(shí)例,并且回調(diào)

 onCreate(),onStart()方法等, 函數(shù)都位于 ActivityThread.java類(lèi) ,如下:

  1. //創(chuàng)建一個(gè)Activity實(shí)例時(shí)同時(shí)創(chuàng)建ContextIml實(shí)例  
  2. private final void handleLaunchActivity(ActivityRecord r, Intent customIntent) {  
  3.     ...  
  4.     Activity a = performLaunchActivity(r, customIntent);  //啟動(dòng)一個(gè)Activity  
  5. }  
  6. private final Activity performLaunchActivity(ActivityRecord r, Intent customIntent) {  
  7.     ...  
  8.     Activity activity = null;  
  9.     try {  
  10.         //創(chuàng)建一個(gè)Activity對(duì)象實(shí)例  
  11.         java.lang.ClassLoader cl = r.packageInfo.getClassLoader();  
  12.         activity = mInstrumentation.newActivity(cl, component.getClassName(), r.intent);  
  13.     }  
  14.     if (activity != null) {  
  15.         ContextImpl appContext = new ContextImpl();      //創(chuàng)建一個(gè)Activity實(shí)例  
  16.         appContext.init(r.packageInfo, r.token, this);   //初始化該ContextIml實(shí)例的相關(guān)屬性  
  17.         appContext.setOuterContext(activity);            //將該Activity信息傳遞給該ContextImpl實(shí)例  
  18.         ...  
  19.     }  
  20.     ...      
  21. }  

 

 

   3、創(chuàng)建Service對(duì)象的時(shí)機(jī)

 

       通過(guò)startService或者bindService時(shí),如果系統(tǒng)檢測(cè)到需要新創(chuàng)建一個(gè)Service實(shí)例,就會(huì)回調(diào)handleCreateService()方法,

 完成相關(guān)數(shù)據(jù)操作。handleCreateService()函數(shù)位于 ActivityThread.java類(lèi),如下:

  1. //創(chuàng)建一個(gè)Service實(shí)例時(shí)同時(shí)創(chuàng)建ContextIml實(shí)例  
  2. private final void handleCreateService(CreateServiceData data){  
  3.     ...  
  4.     //創(chuàng)建一個(gè)Service實(shí)例  
  5.     Service service = null;  
  6.     try {  
  7.         java.lang.ClassLoader cl = packageInfo.getClassLoader();  
  8.         service = (Service) cl.loadClass(data.info.name).newInstance();  
  9.     } catch (Exception e) {  
  10.     }  
  11.     ...  
  12.     ContextImpl context = new ContextImpl(); //創(chuàng)建一個(gè)ContextImpl對(duì)象實(shí)例  
  13.     context.init(packageInfo, null, this);   //初始化該ContextIml實(shí)例的相關(guān)屬性  
  14.     //獲得我們之前創(chuàng)建的Application對(duì)象信息  
  15.     Application app = packageInfo.makeApplication(false, mInstrumentation);  
  16.     //將該Service信息傳遞給該ContextImpl實(shí)例  
  17.     context.setOuterContext(service);  
  18.     ...  
  19. }  


 

    另外,需要強(qiáng)調(diào)一點(diǎn)的是,通過(guò)對(duì)ContextImp的分析可知,其方法的大多數(shù)操作都是直接調(diào)用其屬性mPackageInfo(該屬性類(lèi)

型為PackageInfo)的相關(guān)方法而來(lái)。這說(shuō)明ContextImp是一種輕量級(jí)類(lèi),而PackageInfo才是真正重量級(jí)的類(lèi)。而一個(gè)App里的

有ContextIml實(shí)例,都對(duì)應(yīng)同一個(gè)packageInfo對(duì)象。

            

 

     最后給大家分析利用Context獲取SharedPreferences類(lèi)的使用方法,SharedPreferences類(lèi)想必大家都使用過(guò),其一般獲取方

法就是通過(guò)調(diào)用getSharedPreferences()方法去根據(jù)相關(guān)信息獲取SharedPreferences對(duì)象。具體流程如下:

 

    1 、調(diào)用  getSharedPreferences()獲取對(duì)應(yīng)的的文件,該函數(shù)實(shí)現(xiàn)功能如下:

 

  1. //Context類(lèi)靜態(tài)數(shù)據(jù)集合,以鍵值對(duì)保存了所有讀取該xml文件后所形成的數(shù)據(jù)集合  
  2. private static final HashMap<File, SharedPreferencesImpl> sSharedPrefs =   
  3.        new HashMap<File, SharedPreferencesImpl>();   
  4.   
  5. @Override  
  6. public SharedPreferences getSharedPreferences(String name, int mode){  
  7.      //其所對(duì)應(yīng)的SharedPreferencesImpl對(duì)象 ,該對(duì)象已一個(gè)HashMap集合保存了我們對(duì)該文件序列化結(jié)果  
  8.      SharedPreferencesImpl sp;    
  9.      File f = getSharedPrefsFile(name);  //該包下是否存在對(duì)應(yīng)的文件,不存在就新建一個(gè)  
  10.      synchronized (sSharedPrefs) {       //是否已經(jīng)讀取過(guò)該文件,是就直接返回該SharedPreferences對(duì)象  
  11.          sp = sSharedPrefs.get(f);  
  12.          if (sp != null && !sp.hasFileChanged()) {  
  13.              //Log.i(TAG, "Returning existing prefs " + name + ": " + sp);  
  14.              return sp;  
  15.          }  
  16.      }  
  17.      //以下為序列化該xml文件,同時(shí)將數(shù)據(jù)寫(xiě)到map集合中       
  18.      Map map = null;  
  19.      if (f.exists() && f.canRead()) {  
  20.          try {  
  21.              str = new FileInputStream(f);  
  22.              map = XmlUtils.readMapXml(str);  
  23.              str.close();  
  24.          }   
  25.          ...  
  26.      }  
  27.        
  28.      synchronized (sSharedPrefs) {  
  29.          if (sp != null) {  
  30.              //Log.i(TAG, "Updating existing prefs " + name + " " + sp + ": " + map);  
  31.              sp.replace(map);   //更新數(shù)據(jù)集合  
  32.          } else {  
  33.              sp = sSharedPrefs.get(f);  
  34.              if (sp == null) {    
  35.                  //新建一個(gè)SharedPreferencesImpl對(duì)象,并且設(shè)置其相關(guān)屬性  
  36.                  sp = new SharedPreferencesImpl(f, mode, map);    
  37.                  sSharedPrefs.put(f, sp);  
  38.              }  
  39.          }  
  40.          return sp;  
  41.      }  
  42. }  

 

   2、 SharedPreferences 不過(guò)是個(gè)接口,它定義了一些操作xml文件的方法,其真正實(shí)現(xiàn)類(lèi)為SharedPreferencesImpl ,該類(lèi)是

    ContextIml的內(nèi)部類(lèi),該類(lèi)如下:

 

  1. //soga,這種形式我們?cè)诜治鯟ontext ContextIml時(shí)接觸過(guò)   
  2. //SharedPreferences只是一種接口,其真正實(shí)現(xiàn)類(lèi)是SharedPreferencesImpl類(lèi)  
  3. private static final class SharedPreferencesImpl implements SharedPreferences{  
  4.      private Map mMap;  //保存了該文件序列化結(jié)果后的操作, 鍵值對(duì)形式  
  5.        
  6.      //通過(guò)key值獲取對(duì)應(yīng)的value值  
  7.      public String getString(String key, String defValue) {  
  8.          synchronized (this) {  
  9.              String v = (String)mMap.get(key);  
  10.              return v != null ? v : defValue;  
  11.          }  
  12.      }  
  13.      ...  
  14.      //獲得該SharedPreferencesImpl對(duì)象對(duì)應(yīng)的Edito類(lèi),對(duì)數(shù)據(jù)進(jìn)行操作  
  15.      public final class EditorImpl implements Editor {  
  16.          private final Map<String, Object> mModified = Maps.newHashMap(); //保存了對(duì)鍵值變化的集合  
  17.      }  
  18. }  

 



       基本上獲取SharedPreferences 對(duì)象就是這么來(lái)的,關(guān)于Context里的更多方法請(qǐng)大家參照源代碼認(rèn)真學(xué)習(xí)吧。

 

 

posted on 2012-03-19 16:44 life02 閱讀(6353) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Android開(kāi)發(fā)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲免费在线看| 国产精品综合不卡av| 蜜臀av在线播放一区二区三区| 一本高清dvd不卡在线观看| 亚洲欧美日韩国产成人| 久久久之久亚州精品露出| 欧美午夜在线| 一本一本久久a久久精品综合麻豆| 久久岛国电影| 欧美在线视频一区| 国内精品免费午夜毛片| 欧美在线视频网站| 久久久久一本一区二区青青蜜月| 国产综合18久久久久久| 久久一日本道色综合久久| 美国成人直播| 欧美人与性动交cc0o| 中文在线资源观看网站视频免费不卡| 美女日韩在线中文字幕| 免费欧美在线| 亚洲欧美一区二区激情| 一区二区三区日韩在线观看| 亚洲国产一区二区精品专区| 欧美jizzhd精品欧美巨大免费| 亚洲第一福利视频| 99视频有精品| 国产日韩欧美一区| 亚洲高清在线观看一区| 欧美屁股在线| 久久精品在线观看| 欧美久久久久久久久久| 久久国产主播精品| 欧美日韩国产在线看| 久久不射中文字幕| 欧美日韩日日夜夜| 欧美69视频| 国产亚洲成av人在线观看导航| 欧美1区视频| 国产夜色精品一区二区av| 亚洲人成在线影院| 国内久久精品| 亚洲欧美中文在线视频| 亚洲深夜av| 欧美日韩mp4| 亚洲国产精品va在线看黑人动漫 | 一区二区久久久久久| 亚洲高清在线播放| 欧美一区午夜精品| 性做久久久久久免费观看欧美| 欧美风情在线观看| 亚洲欧洲日本在线| 中国日韩欧美久久久久久久久| 欧美在线视频a| 久久另类ts人妖一区二区| 欧美日韩亚洲综合一区| 91久久一区二区| 亚洲自拍三区| 欧美专区福利在线| 中文网丁香综合网| 国产欧美视频一区二区| 亚洲男人的天堂在线观看| 亚洲免费在线观看| 国产欧美精品在线观看| 欧美一区二区三区免费观看| 久久亚洲综合色一区二区三区| 国产日韩欧美日韩大片| 久久国产视频网站| 亚洲高清色综合| 亚洲欧美日韩国产另类专区| 国产欧美亚洲一区| 免费美女久久99| 国产精品99久久久久久有的能看| 亚洲欧美亚洲| 亚洲毛片播放| 国产一区二区视频在线观看| 久久国产视频网站| 亚洲乱码国产乱码精品精98午夜| 午夜在线成人av| 亚洲激情网站| 国产欧美韩日| 欧美午夜电影网| 欧美刺激性大交免费视频 | 国产欧美一区视频| 欧美高清视频www夜色资源网| 日韩午夜精品| 91久久午夜| 亚洲黄一区二区| 欧美激情第二页| 免播放器亚洲| 欧美成人三级在线| 欧美国产精品中文字幕| 免费欧美在线视频| 欧美国产大片| 亚洲国产天堂久久综合| 亚洲国产欧美一区二区三区同亚洲 | 一区二区电影免费在线观看| 久久综合伊人77777| 久久久伊人欧美| 久久激情视频久久| 久久精品欧洲| 久久美女性网| 欧美成人免费在线| 亚洲精品国产无天堂网2021| 国产精品青草综合久久久久99| 欧美日韩你懂的| 国产精品老牛| 在线观看日韩国产| 9色精品在线| 亚洲视频网在线直播| 欧美在线免费视频| 模特精品裸拍一区| 日韩一级不卡| 久久久久久自在自线| 欧美日韩福利| 国产亚洲欧美日韩日本| 日韩视频在线观看免费| 欧美一区二区三区久久精品| 欧美va天堂| 亚洲永久在线| 欧美理论电影在线观看| 极品少妇一区二区三区精品视频| 亚洲第一区色| 久久九九免费视频| 91久久久久久| 欧美二区不卡| 红桃视频成人| 久久免费午夜影院| 亚洲一级在线| 欧美午夜无遮挡| 日韩亚洲欧美综合| 亚洲成人中文| 欧美大片在线观看| 性8sex亚洲区入口| 欧美视频一区二区三区| 日韩视频久久| 亚洲人成毛片在线播放| 欧美黄在线观看| 日韩视频在线观看免费| 亚洲国内精品在线| 欧美国产免费| 亚洲影视在线播放| 欧美国产亚洲另类动漫| 亚洲视频在线一区观看| 久久先锋影音av| 99re成人精品视频| 一区二区三区 在线观看视频| 欧美日韩亚洲精品内裤| 亚洲欧美成人综合| 久久九九99| 在线午夜精品| 欧美在线影院| 99re6热在线精品视频播放速度| 一区二区国产精品| 狠狠狠色丁香婷婷综合久久五月 | 亚洲欧美视频| 亚洲国产精品va在看黑人| 亚洲福利视频专区| 欧美激情一区二区三区蜜桃视频| 99伊人成综合| 欧美一区二区视频在线| 国产精品一区二区女厕厕| 欧美.com| 国产午夜亚洲精品不卡| 亚洲免费av观看| 国产精品一区免费视频| 亚洲影院色无极综合| 一区二区日韩精品| 久久久久国产精品www| 欧美中文在线观看国产| 一区二区欧美日韩| 亚洲国产精品v| 久久久久久久91| 久久精品国产综合| 国产午夜亚洲精品羞羞网站 | 午夜精品久久久久99热蜜桃导演| 亚洲清纯自拍| 国产精品影片在线观看| 日韩性生活视频| 亚洲欧洲日产国码二区| 久热成人在线视频| 欧美成人午夜免费视在线看片| 国产一区二区中文| 欧美在线free| 蜜臀va亚洲va欧美va天堂| 在线观看成人网| 一区二区日韩伦理片| 亚洲第一在线综合在线| 亚洲永久免费| 中文日韩电影网站| 欧美午夜无遮挡| 欧美一区二区三区男人的天堂| 久久久久天天天天| 91久久综合| 久久亚洲一区| 亚洲毛片在线| 久久精品91| 亚洲午夜久久久| 在线日本高清免费不卡| 欧美日韩国产精品一区二区亚洲 | 黄色成人在线观看|