精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

android四大組件之Service

移動開發 Android
Service 是一個可以在后臺執行長時間運行操作而不提供用戶界面的應用組件。服務可由其他應用組件啟動,而且即使用戶切換到其他應用,服務仍將在后臺繼續運行。此外,組件可以綁定到服務,以與之進行交互,甚至是執行進程間通信 (IPC)。

最近因為還沒找到工作所以也趁著現在有時間,將以前的只是整理下,要不然總容易遺忘,今天就來講解下Service的用法。作為Android的四大組件之一,其重要性可想而知。在應用中我們主要是用來進行一些后臺操作,不需與應用UI進行交互,執行耗時任務等。

官方文檔中這樣說:

Service 是一個可以在后臺執行長時間運行操作而不提供用戶界面的應用組件。服務可由其他應用組件啟動,而且即使用戶切換到其他應用,服務仍將在后臺繼續運行。

此外,組件可以綁定到服務,以與之進行交互,甚至是執行進程間通信 (IPC)。 例如,服務可以處理網絡事務、播放音樂,執行文件 I/O

或與內容提供程序交互,而所有這一切均可在后臺進行。

Service的用途:

1.在后臺執行耗時操作,但不需要與用戶進行交互。2.一個應用暴露出來的一些供其他應用使用的功能。

這里需要聲明一點,Service是運行在主線程中,因而如果需要進行耗時操作或者訪問網絡等操作,需要在Service中再開啟一個線程來執行(使用IntentService的話則不需要在自己手動開啟線程)。

啟動Service

啟動一個Service有兩種方式:

  1. Context.startService() 
  1. Context.bindService()  

 

 

 

(圖片截取自官方文檔:https://developer.android.com...)

startService()方式啟動Service,我們啟動之后是沒有辦法再對Service進行控制的,而且啟動之后該Service是一直在后臺運行的,即使它里面的一些代碼執行完畢,我們要想終止該Service,就需要在他的代碼里面調用stopSelf()方法或者直接調用stopService() 方法。而通過bindService()方法啟動的Service,客戶端將獲得一個到Service的持久連接,客戶端會獲取到一個由Service的onBind(Intent)方法返回來的IBinder對象,用來供客戶端回調Service中的回調方法。

我們無論使用那種方法,都需要定義一個類,讓它繼承Service類,并重寫其中的幾個方法,如果我們是采用startService()方式啟動的話,只需要重寫onCreate() 、onStartCommand(Intent intent, int flags, int startId)、onDestroy()方法即可(其實我們也可以重寫),而如果采用的是bindService()方法啟動的話,我們就需要重寫onCreate() 、onBind(Intent intent)、 onUnbind(Intent intent)方法.注意,作為四大組件之一,Service使用之前要在清單文件中進行配置。 

  1. <application> 
  2.        ...... 
  3.        <service 
  4.            android:name=".MyService"
  5.        </service> 
  6.    </application>  

Context.startService()

MyService.java的代碼: 

  1. public class MyService extends Service { 
  2.     public MyService() { 
  3.     } 
  4.  
  5.     @Override 
  6.     public void onCreate() { 
  7.         super.onCreate(); 
  8.  
  9.         Log.i("test","onCrete executed !"); 
  10.     } 
  11.  
  12.     @Override 
  13.     public int onStartCommand(Intent intent, int flags, int startId) { 
  14.  
  15.         Log.i("test","onStartComand executed !"); 
  16.         return super.onStartCommand(intent, flags, startId); 
  17.     } 
  18.  
  19.     @Override 
  20.     public void onDestroy() { 
  21.         super.onDestroy(); 
  22.         Log.i("test","onDestroy executed !"); 
  23.     } 
  24.  

MainActivity.java的代碼如下:

  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 
  2.  
  3.     Button btnStart,btnStop; 
  4.     @Override 
  5.     protected void onCreate(Bundle savedInstanceState) { 
  6.         super.onCreate(savedInstanceState); 
  7.         setContentView(R.layout.activity_main); 
  8.  
  9.         btnStart = (Button) findViewById(R.id.btn_start); 
  10.         btnStop = (Button) findViewById(R.id.btn_stop); 
  11.         btnStart.setOnClickListener(this); 
  12.         btnStop.setOnClickListener(this); 
  13.     } 
  14.  
  15.  
  16.     @Override 
  17.     public void onClick(View view) { 
  18.  
  19.         Intent mIntent = new Intent(MainActivity.this,MyService.class); 
  20.  
  21.         switch (view.getId()){ 
  22.             case R.id.btn_start: 
  23.                 startService(mIntent); 
  24.                 break; 
  25.             case R.id.btn_stop: 
  26.                 stopService(mIntent); 
  27.                 break; 
  28.         } 
  29.     } 
  30.  

主界面就兩個按鈕,一個用來啟動Service,一個用來停止Service: 

 

 

 

下面我們先點擊START按鈕,Log信息如下: 

 

可以看出,onCreate()方法先執行,然后onStartCommand()方法緊接著執行,那么如果我們再次點擊啟動按鈕呢?結果如下圖: 

 

我們可以看到,這次onCreate()方法沒有再執行,而是直接執行了onStartCommand()方法,這是因為Service只在***次創建的時候才執行onCreate()方法,如果已經創建了,那之后再次調用startService()啟動該Service的時候,只會去執行onStartCommand()方法方法,而不會再執行onCreate()方法。 

接下來我們點擊停止按鈕,可以看到,onDestroy()方法被執行了: 

 

 

 

注意,如果我們不點擊停止按鈕手動停止該Service的話,該Service會一直在后臺運行,即使它的onStartCommand()方法中的代碼已經執行完畢,在下圖中我們可以看到:

這時候我們的這個Service是一直在后臺執行的,即使它的onStartCommand()方法中的代碼已經執行完了。如果我們想要它自動停止的話,可以將onStartCommand()方法中的代碼修改如下:

  1. @Override 
  2.    public int onStartCommand(Intent intent, int flags, int startId) { 
  3.  
  4.        Log.i("test","onStartComand() executed !"); 
  5.        stopSelf(); 
  6.        return super.onStartCommand(intent, flags, startId); 
  7.    }  

Context.bindService()

采用該方法的代碼就稍微比以前的多了,因為我們需要在客戶端對Service進行控制,因而會在MainActivity中創建一個匿名內部類ServiceConnection,然后會在bindService()方法和unbindService()方法中將其傳入。MyService.java 中的代碼如下: 

  1. public class MyService extends Service { 
  2.     private MyBinder myBinder = new MyBinder(); 
  3.  
  4.     public MyService() { 
  5.     } 
  6.  
  7.     @Override 
  8.     public void onCreate() { 
  9.         super.onCreate(); 
  10.         Log.i("test","onCreate() executed !"); 
  11.     } 
  12.  
  13.     @Override 
  14.     public void onDestroy() { 
  15.         super.onDestroy(); 
  16.         Log.i("test","onDestroy() executed !"); 
  17.     } 
  18.  
  19.     @Override 
  20.     public boolean onUnbind(Intent intent) { 
  21.  
  22.         Log.i("test","onUnbind executed !"); 
  23.         return super.onUnbind(intent); 
  24.     } 
  25.  
  26.     @Override 
  27.     public IBinder onBind(Intent intent) { 
  28.         Log.i("test","onBind() executed !"); 
  29.         return myBinder; 
  30.     } 
  31.  
  32.     class MyBinder extends Binder{ 
  33.         public void startDownload(){ 
  34.  
  35.             Log.i("test""MyBinder中的startDownload() executed !"); 
  36.             // 執行具體的下載任務,需開啟一個子線程,在其中執行具體代碼 
  37.         } 
  38.     } 
  39.  

MainActivity.java 的代碼如下: 

  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 
  2.  
  3.     Button btnBind,btnUnBind; 
  4.     MyService.MyBinder myBinder ; 
  5.     @Override 
  6.     protected void onCreate(Bundle savedInstanceState) { 
  7.         super.onCreate(savedInstanceState); 
  8.         setContentView(R.layout.activity_main); 
  9.  
  10.         btnBind = (Button) findViewById(R.id.bind); 
  11.         btnUnBind = (Button) findViewById(R.id.btn_unBind); 
  12.         btnBind.setOnClickListener(this); 
  13.         btnUnBind.setOnClickListener(this); 
  14.  
  15.     } 
  16.  
  17.     ServiceConnection mServiceConnection = new ServiceConnection() { 
  18.         @Override 
  19.         public void onServiceConnected(ComponentName componentName, IBinder iBinder) { 
  20.             // 將IBinder向下轉型為我們的內部類MyBinder 
  21.             myBinder = (MyService.MyBinder) iBinder; 
  22.             // 執行下載任務 
  23.             myBinder.startDownload(); 
  24.         } 
  25.  
  26.         @Override 
  27.         public void onServiceDisconnected(ComponentName componentName) { 
  28.  
  29.         } 
  30.     }; 
  31.  
  32.     @Override 
  33.     public void onClick(View view) { 
  34.  
  35.         Intent mIntent = new Intent(MainActivity.this,MyService.class); 
  36.  
  37.         switch (view.getId()){ 
  38.             case R.id.bind: 
  39.                 // 綁定Service 
  40.                 bindService(mIntent,mServiceConnection,BIND_AUTO_CREATE); 
  41.                 break; 
  42.             case R.id.btn_unBind: 
  43.                 // 取消綁定Service 
  44.                 unbindService(mServiceConnection); 
  45.                 break; 
  46.         } 
  47.     } 
  48.  

點擊綁定按鈕; 

 

點擊取消綁定按鈕: 

 

注意,如果我們沒有先點擊綁定,而是直接點擊的取消綁定,程序會直接crash,報以下錯誤: 

  1. java.lang.IllegalArgumentException: Service not registered: com.qc.admin.myserializableparceabledemo.MainActivity$1@8860e28 
  2.  at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1120) 
  3.  at android.app.ContextImpl.unbindService(ContextImpl.java:1494) 
  4.  at android.content.ContextWrapper.unbindService(ContextWrapper.java:616) 
  5.  at com.qc.admin.myserializableparceabledemo.MainActivity.onClick(MainActivity.java:71)  

 

 

 

細心的你也許早就發現了,Log中并沒有打印"onServiceDisconnected executed !"這句,也就是說沒有調用onServiceDisconnected()方法?從字面理解,onServiceConnected()方法是在Service建立連接的時候調用的,onServiceDisconnected()不就應該是在Service斷開連接的時候調用的嗎?其實不然,我們查看該方法的文檔就知道了:

Called when a connection to the Service has been lost. This typically happens when the process hosting the service has crashed or been killed. This does not remove the ServiceConnection itself -- this binding to the service will remain active, and you will receive a call to onServiceConnected(ComponentName, IBinder) when the Service is next running.

意思就是:當綁定到該Service的連接丟失的時候,該方法會被調用,典型的情況就是持有該Service的進程crash掉了,或者被殺死了。但是這并不會移除ServiceConnection 自身--它仍然是保持活躍狀態,當Service下次被執行的時候,onServiceConnected(ComponentName, IBinder) 方法仍然會被調用。

但是要注意,如果我們按照剛才說的,不是先點擊 bindService()方法,而是直接點擊unbindService()方法,程序雖然也是crash掉了,但onServiceDisconnected()方法并不會被調用,這個很容易理解,畢竟都沒有建立連接呢,談何斷開連接啊。但是如果我們已經綁定了Service,然后在后臺直接終止該Service呢?結果會怎樣?答案是onServiceDisconnected()方法仍然不會調用。這里我覺得應該是只有在意外的情況下進程結束,是由系統自動調用的,而非我們手動停止的。我們可以查看該方法內部的注釋:

This is called when the connection with the service has been

unexpectedly disconnected -- that is, its process crashed.Because it

is running in our same process, we should never see this happen.

這段文字清楚的說明了該方法執行的場景:異常情況下導致斷開了連接。也就是進程crash掉了。因為它運行在我們應用程序所在的進程中,因而我們將永遠不希望看到這種情況發生。

Context.startService()和Context.bindService()同時使用

這兩種方式是可以同時使用的,但是要注意,startService()和stopService()方法是對應的,而bindService()和unBind()方法是對應的,也就是說如果我們先調用startService()之后調用bindService()方法,或者相反,那么我們如果只調用stopService()或者只調用bindService()都無法停止該Service,只有同時調用才可以。

下面來看下具體代碼:

MainActivity.java 

  1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 
  2.  
  3.     Button btnStart,btnStop,btnBind,btnUnBind; 
  4.     MyService.MyBinder myBinder ; 
  5.     @Override 
  6.     protected void onCreate(Bundle savedInstanceState) { 
  7.         super.onCreate(savedInstanceState); 
  8.         setContentView(R.layout.activity_main); 
  9.  
  10.         btnStart = (Button) findViewById(R.id.btn_start); 
  11.         btnStop = (Button) findViewById(R.id.btn_stop); 
  12.         btnBind = (Button) findViewById(R.id.btn_bind); 
  13.         btnUnBind = (Button) findViewById(R.id.btn_unBind); 
  14.  
  15.         btnStart.setOnClickListener(this); 
  16.         btnStop.setOnClickListener(this); 
  17.         btnBind.setOnClickListener(this); 
  18.         btnUnBind.setOnClickListener(this); 
  19.  
  20.     } 
  21.  
  22.     ServiceConnection mServiceConnection = new ServiceConnection() { 
  23.         @Override 
  24.         public void onServiceConnected(ComponentName componentName, IBinder iBinder) { 
  25.             // 將IBinder向下轉型為我們的內部類MyBinder 
  26.             myBinder = (MyService.MyBinder) iBinder; 
  27.             // 執行下載任務 
  28.             myBinder.startDownload(); 
  29.  
  30.         } 
  31.  
  32.         @Override 
  33.         public void onServiceDisconnected(ComponentName componentName) { 
  34.  
  35.             Log.i("test","onServiceDisconnected executed !"); 
  36.         } 
  37.     }; 
  38.  
  39.     @Override 
  40.     public void onClick(View view) { 
  41.  
  42.         Intent mIntent = new Intent(MainActivity.this,MyService.class); 
  43.  
  44.         switch (view.getId()){ 
  45.             case R.id.btn_start: 
  46.                 // 啟動Service 
  47.                 startService(mIntent); 
  48.                 break; 
  49.             case R.id.btn_stop: 
  50.                 // 終止Service 
  51.                 stopService(mIntent); 
  52.                 break; 
  53.             case R.id.btn_bind: 
  54.                 // 綁定Service 
  55.                 bindService(mIntent,mServiceConnection,BIND_AUTO_CREATE); 
  56.                 break; 
  57.             case R.id.btn_unBind: 
  58.                 // 取消綁定Service 
  59.                 unbindService(mServiceConnection); 
  60.                 break; 
  61.         } 
  62.     } 
  63.  

MyService.java的代碼: 

  1. public class MyService extends Service { 
  2.     private MyBinder myBinder = new MyBinder(); 
  3.  
  4.     public MyService() { 
  5.     } 
  6.  
  7.     @Override 
  8.     public void onCreate() { 
  9.         super.onCreate(); 
  10.         Log.i("test","onCreate() executed !"); 
  11.     } 
  12.  
  13.     @Override 
  14.     public int onStartCommand(Intent intent, int flags, int startId) { 
  15.  
  16.         Log.i("test","onStartComand() executed !"); 
  17.         return super.onStartCommand(intent, flags, startId); 
  18.     } 
  19.  
  20.     @Override 
  21.     public void onDestroy() { 
  22.         super.onDestroy(); 
  23.         Log.i("test","onDestroy() executed !"); 
  24.     } 
  25.  
  26.     @Override 
  27.     public boolean onUnbind(Intent intent) { 
  28.  
  29.         Log.i("test","onUnbind executed !"); 
  30.         return super.onUnbind(intent); 
  31.     } 
  32.  
  33.     @Override 
  34.     public IBinder onBind(Intent intent) { 
  35.         Log.i("test","onBind() executed !"); 
  36.         return myBinder; 
  37.     } 
  38.  
  39.     class MyBinder extends Binder{ 
  40.         public void startDownload(){ 
  41.  
  42.             Log.i("test""MyBinder中的startDownload() executed !"); 
  43.             // 執行具體的下載任務 
  44.         } 
  45.     } 
  46.  

a.下面是依次點擊start、bind、stop、unBind 按鈕的輸出結果: 

 

 

 

b.下面是依次點擊start、bind、unbind、stop 按鈕時的輸出結果: 

 

 

 

在前臺運行服務

我們上面一直說Service一般是用來在后臺執行耗時操作,但是要知道,Service也是可以運行在前臺的。后臺Service的優先級比較低,容在內存不足等情況下被系統殺死,通過將其設置為前臺,可以大大降低其被殺死的機會。前臺Service會在系統通知欄顯示一個圖標,我們可以在這里進行一些操作。前臺Service比較常見的場景有音樂播放器和天氣預報等: 

 

 

 

那么接下來我們就直接上代碼: 

  1. @Override 
  2.     public void onCreate() { 
  3.         super.onCreate(); 
  4.         Log.i("test""onCreate() executed !"); 
  5.  
  6.         Intent mIntent = new Intent(this, SecondActivity.class); 
  7.         PendingIntent mPendingIntent = PendingIntent.getActivity(this, 0, mIntent, 0); 
  8.         Notification mNotification = new NotificationCompat.Builder(this) 
  9.                 .setSmallIcon(R.mipmap.ic_launcher) 
  10.                 .setContentTitle("My Notification "
  11.                 .setContentText("Hello World ! "
  12.                 .setContentIntent(mPendingIntent) 
  13.                 .build(); 
  14.  
  15.         // 注意:提供給 startForeground() 的整型 ID 不得為 0。 
  16.         // 要從前臺移除服務,請調用 stopForeground()。此方法采用一個布爾值,指示是否也移除狀態欄通知。 
  17.         // 然而stopForeground()不會停止服務。 但是,如果您在服務正在前臺運行時將其停止,則通知也會被移除。 
  18.         startForeground(1, mNotification); 
  19.     }  

其實這里的實現很簡單,就是將一個Notification通過startForeground(1, mNotification);傳進去,從而將Notification與 Service建立起關聯。我們點擊這個通知,就會跳轉到第二個Activity(但是該Notification并不會消失),截圖如下:

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2014-07-31 10:57:15

Android組件Service

2013-01-10 14:21:24

Android開發組件Activities

2014-03-27 15:34:55

Android組件Activity

2014-03-27 15:57:45

Android組件Activity

2010-08-05 10:22:46

Flex效果

2015-07-17 09:50:16

Carthage優劣比較

2010-08-17 09:20:28

DIV布局

2010-11-03 11:10:04

AndroidiPhone

2024-12-30 11:24:56

APMZipkinPinpoint

2012-02-08 13:52:30

云計算

2011-03-21 09:01:49

CSS框架

2017-12-08 14:26:19

Android面試知識點總結

2015-10-22 10:48:47

Android四大組件攔截

2009-08-28 10:47:46

Java EE容器

2013-01-06 10:44:43

微軟Windows 8云計算

2016-03-30 11:51:55

2013-05-20 08:56:13

2017-03-03 10:10:44

Linux進程管理基礎知識

2021-08-10 20:41:33

AndroidApp流程

2011-10-21 13:59:48

Java云計算
點贊
收藏

51CTO技術棧公眾號

夜夜爽99久久国产综合精品女不卡 | 大陆极品少妇内射aaaaa| 香港三日本三级少妇66| 亚洲欧美日韩一区在线观看| 揄拍成人国产精品视频| 日韩 国产 一区| h片在线观看视频免费| 久久久蜜桃精品| 国产精品美女网站| 男人晚上看的视频| 欧美大片网址| 7777女厕盗摄久久久| 美脚丝袜脚交一区二区| 成人高清免费观看mv| 国产成人精品一区二区三区四区| 日本亚洲欧洲色| 欧美成人三级在线观看| 神马日本精品| 精品区一区二区| 无尽裸体动漫2d在线观看| 成人黄色动漫| 亚洲美女视频一区| 日本一区二区三区四区在线观看 | 一区二区欧美激情| 中文字幕99页| 在线观看欧美| 欧美在线观看18| 俄罗斯av网站| 美女网站视频在线| 国产精品伦理一区二区| 鲁丝一区鲁丝二区鲁丝三区| 性一交一乱一乱一视频| 久久99蜜桃精品| 日韩av黄色在线观看| 日操夜操天天操| 欧美日韩福利| 久久综合伊人77777蜜臀| 久久婷婷五月综合| 免费电影一区二区三区| 日韩精品在线看| 9.1在线观看免费| 日韩最新av| 这里只有精品视频在线观看| 999精彩视频| 成人看片网页| 日本高清不卡aⅴ免费网站| 免费在线a视频| 国产免费拔擦拔擦8x在线播放 | 欧美日韩一级在线| 9色在线视频| 国产欧美一区二区精品秋霞影院| 欧美另类一区| 猫咪在线永久网站| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品视频免费观看| 欧美 日韩 国产 成人 在线| 国产大陆a不卡| 99在线观看视频| 亚洲精品一区二区三区蜜桃| 国产99久久久国产精品潘金| 国产精品久久久久av福利动漫| 成人午夜免费在线观看| 成人小视频免费在线观看| 国产精品一区二区免费| 天天干天天插天天操| 97se亚洲国产综合自在线观| 蜜桃av久久久亚洲精品| 国产一二三区在线| 国产精品久久精品日日| 五月天综合婷婷| 欧美黄色视屏| 精品女同一区二区三区在线播放| 农村妇女精品一二区| 日韩av中字| 欧美日韩一区二区不卡| 伊人国产精品视频| 精品伊人久久久| 亚洲色图第三页| 林心如三级全黄裸体| 久久久精品久久久久久96| 九九热这里只有在线精品视| 免费一级特黄特色大片| 性色一区二区| 91免费的视频在线播放| 国产小视频免费观看| 26uuu久久综合| 亚洲一区二区四区| 色呦呦在线视频| 色综合久久久久网| 日韩av自拍偷拍| 林ゆな中文字幕一区二区| 亚洲天堂色网站| 欧美偷拍第一页| 亚洲一区二区网站| 成人精品网站在线观看| 香蕉视频911| 中文字幕亚洲成人| 人妻少妇精品久久| 热久久久久久| 日韩电影免费观看在线观看| 天堂在线中文视频| 影音先锋日韩资源| 91精品久久久久久久久久另类| 免费观看黄色一级视频| 国产精品亲子伦对白| 黄色激情在线视频| 婷婷激情成人| 国产视频久久久| 男女免费视频网站| 日本不卡123| 黄色99视频| 国产激情在线视频| 在线免费一区三区| 欧美日韩一区二区三区四区五区六区| 怕怕欧美视频免费大全| 久久久伊人欧美| 国产欧美综合视频| 国产精品视频一二三区 | 阿v视频在线| 91麻豆精品国产91久久久久久 | 亚洲伦理在线观看| 亚洲视频综合在线| 国产精品igao| 亚洲三级性片| 97国产精品视频人人做人人爱| 97超碰国产在线| 欧美高清一级片在线观看| 欧美 日韩 国产 高清| 亚洲91网站| 久久天天躁日日躁| 中文字幕日产av| 久久午夜老司机| 日本欧美黄色片| 91在线一区| 欧美富婆性猛交| a天堂视频在线| 亚洲色图欧洲色图| 日本高清久久久| 久久中文字幕av| 国产精品无av码在线观看| 精品推荐蜜桃传媒| 色哦色哦哦色天天综合| 蜜桃无码一区二区三区| 国产精品久久国产愉拍| 激情久久av| 黄在线观看免费网站ktv| 精品日韩欧美在线| 国产精品23p| 成人爱爱电影网址| 青青青免费在线| 美女一区2区| 97久久国产精品| 三级在线电影| 色一情一乱一乱一91av| 91激情视频在线观看| 日韩va欧美va亚洲va久久| 日韩成人在线资源| 国内欧美日韩| 久热精品视频在线免费观看| japanese国产| 亚洲超丰满肉感bbw| 国产性生活毛片| 乱码第一页成人| 日韩av大全| 日韩电影免费观看高清完整版在线观看| 在线观看日韩www视频免费| 91激情在线观看| 伊人性伊人情综合网| 秘密基地免费观看完整版中文| 亚洲区一区二| 日韩欧美亚洲精品| 精品视频一二| 97色在线观看| 国产高清在线| 日韩美一区二区三区| 日本一区二区不卡在线| 国产区在线观看成人精品 | 国产情侣免费视频| 亚洲欧美日韩一区二区三区在线观看 | 男人久久天堂| 色噜噜国产精品视频一区二区| 99久久亚洲精品日本无码| 亚洲国产精品久久人人爱| 一级性生活大片| 蜜臂av日日欢夜夜爽一区| 国风产精品一区二区| 日韩福利视频一区| 国产欧美日韩中文| 2019中文字幕在线电影免费 | 精品一区二区国产| 黑人一区二区三区| 欧美日韩不卡合集视频| 日本v片在线免费观看| 在线综合视频播放| 一级成人黄色片| 亚洲视频小说图片| 少妇真人直播免费视频| 国产精品99久久久久| 91av在线免费播放| 激情欧美一区| 亚洲国产一区二区三区在线播| 成人h动漫免费观看网站| 国产精品va在线播放我和闺蜜| а√中文在线8| 在线电影欧美日韩一区二区私密| 好吊色在线观看| 欧美日韩dvd在线观看| 欧美日韩精品区| 亚洲欧美色图小说| 免费在线观看a视频| 9久草视频在线视频精品| 欧美丝袜在线观看| 日日摸夜夜添夜夜添精品视频| 国产在线xxxx| 欧美成免费一区二区视频| 久久久婷婷一区二区三区不卡| 欧美黄视频在线观看| 国产精品自产拍在线观看中文| 午夜伦理福利在线| 欧美激情视频网| 国产丝袜在线| 中文字幕久久久| 日本中文字幕一区二区有码在线 | 毛茸茸多毛bbb毛多视频| 国产乱子伦一区二区三区国色天香| 成年人在线看片| 国产一区成人| 欧美爱爱视频免费看| 激情欧美亚洲| 日韩免费在线观看av| 欧美成人一品| 性欧美18一19内谢| 久久国产精品亚洲人一区二区三区| 欧美高清一区二区| 色先锋久久影院av| 久久精品女人的天堂av| 国产精品15p| 国产一区免费观看| 91精品啪在线观看国产爱臀| 91嫩草在线| 日本免费精品| 99蜜桃在线观看免费视频网站| 国产精品一区二区美女视频免费看| 国产日韩精品视频| 日本在线一区二区| 成人av在线亚洲| 91精品国产色综合久久不卡粉嫩| 国产精品一香蕉国产线看观看| 国产成人免费9x9x人网站视频| 国产精品啪视频| 久久av影院| 亚洲在线免费视频| 2021年精品国产福利在线| 国产精品久久国产精品| 久久激情av| 欧美久久久久久久| 精品一区av| 中文字幕av日韩精品| 我不卡伦不卡影院| www.xxx麻豆| 亚洲一区二区毛片| 欧洲熟妇精品视频| 久久精品国产免费看久久精品| wwwwwxxxx日本| 国产.精品.日韩.另类.中文.在线.播放| 91人妻一区二区| 91蝌蚪porny成人天涯| 夜夜春很很躁夜夜躁| 最新欧美精品一区二区三区| 国产一区二区视频在线观看免费| 亚洲电影第三页| 中文字幕69页| 在线电影一区二区三区| 亚洲乱码在线观看| 亚洲另类图片色| 色欧美激情视频在线| 久久成人18免费网站| 日本蜜桃在线观看视频| 国产精品免费一区豆花| 亚洲天堂中文字幕在线观看| 久久久一本精品99久久精品66| 波多野结衣在线观看一区二区| 9l视频自拍9l视频自拍| 国产精品普通话对白| jizz大全欧美jizzcom| 高清成人免费视频| 摸摸摸bbb毛毛毛片| 亚洲午夜私人影院| 最好看的日本字幕mv视频大全| 欧美电影精品一区二区| 黄色大片在线免费观看| 美女视频黄免费的亚洲男人天堂| 高潮在线视频| 91免费在线视频网站| 欧美日韩看看2015永久免费 | 制服丝袜中文字幕一区| 婷婷视频在线观看| 久久九九国产精品怡红院 | 日本精品一区二区三区四区的功能| 91国内精品视频| 亚洲欧美成人网| 污视频网站在线免费| 国产精品久久久久久久久久久新郎| 盗摄牛牛av影视一区二区| 亚洲午夜精品一区二区三区| 中文日韩欧美| 在线播放av网址| 亚洲欧美综合色| 东京热一区二区三区四区| 日韩亚洲电影在线| 在线观看二区| 日本高清+成人网在线观看| 2020最新国产精品| 日本xxxxx18| 老司机精品视频在线| 国产亚洲无码精品| 亚洲国产另类av| 国产视频一区二区三| 一区二区三欧美| 忘忧草在线日韩www影院| 国产另类自拍| 欧美日韩国内| 免费看的av网站| 亚洲天堂免费在线观看视频| 欧美成人一区二区视频| 亚洲欧美视频在线| 亚洲淫成人影院| 精品不卡一区二区三区| 国一区二区在线观看| 四虎成人在线播放| 日韩理论片中文av| 一区二区三区免费在线视频| 亚洲情综合五月天| a欧美人片人妖| 欧美精品中文字幕一区二区| 国产精品免费看| 亚洲av成人片色在线观看高潮| 亚洲一区二区在线视频| 国产黄色高清视频| 欧美另类在线观看| 视频一区视频二区欧美| 欧美美女黄色网| 国产精品亚洲人在线观看| 老妇女50岁三级| 欧美一区二区三区公司| 91小视频xxxx网站在线| 91成人伦理在线电影| 国产精品啊v在线| 亚洲图片欧美另类| 午夜精品一区在线观看| 天天影院图片亚洲| 日韩av免费在线播放| 精品高清在线| 国产又黄又猛的视频| 亚洲女子a中天字幕| 成人av免费播放| 高清欧美性猛交xxxx| 日韩av午夜| 日韩av资源在线| 中文字幕av资源一区| 一区二区三区精彩视频| 色综合天天狠天天透天天伊人| 一区二区三区四区视频免费观看| 全黄性性激高免费视频| 久久婷婷一区二区三区| 中文字幕精品一区二区精| 久久五月天综合| 国产精品美女在线观看直播| 无码播放一区二区三区| 欧美韩国日本不卡| 国产黄色av片| 欧美在线观看网站| 久久国产精品亚洲人一区二区三区| 手机在线观看日韩av| 亚洲午夜久久久久中文字幕久| 免费资源在线观看| 国产伊人精品在线| 亚洲国产综合在线看不卡| 久久久久久久久久久久久久久| 欧美日韩精品电影| 草莓视频丝瓜在线观看丝瓜18| 日本a级片久久久| 国产一二三精品| 久久青青草原亚洲av无码麻豆 | h片视频在线观看| 日韩av一区二区三区美女毛片| 国产精品自拍毛片| 黄色在线免费观看| 久久综合国产精品台湾中文娱乐网| 日本久久成人网| 91蝌蚪视频在线| 色香色香欲天天天影视综合网| 中文在线免费| 欧美日韩无遮挡| 国产91丝袜在线播放| 中文字幕 国产精品| 久久男人av资源网站| 欧美oldwomenvideos| 中文在线永久免费观看| 91麻豆精品国产自产在线|