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

Android應用程序生命周期中的活動與圖標

移動開發 Android
Activity 類是 Android 移動應用程序的基礎,您可以使用它來優化應用程序與用戶和移動設備的交互。讓應用程序生命周期中的交互方式與您的期望完全一致,并使用圖標與操作欄引導用戶使用 UI 導航與其他應用程序功能。

為您的 Android 移動應用程序添加導航風格

Activity 類是 Android 移動應用程序的基礎,您可以使用它來優化應用程序與用戶和移動設備的交互。讓應用程序生命周期中的交互方式與您的期望完全一致,并使用圖標與操作欄引導用戶使用 UI 導航與其他應用程序功能。

簡介

關于本系列

近年來,移動應用程序發布呈爆炸式增長,移動開發技術市場亦是如此。本系列文章將向那些熟悉編程但對移動技術較為陌生的開發人員介紹移動應用程序的發展情 況。先從使用 Java™ 代碼為本機應用程序編碼開始介紹,然后擴展工具包,使其包含 JVM 語言、腳本框架、HTML5/CSS/JavaScript、第三方工具等。本系列文章將帶您逐步掌握這些必要技術,實際應對所有移動開發場景。

如今移動設備的功能已經強大到難以置信,比眾多開發人員用來編寫首個程序的桌面計算機還要強大得多。因此,大家很容易忘記移動設備仍然屬于資源有限的環境。 開發移動應用程序時,決不能忘記運行應用程序的環境所具有的局限性。尤其是當應用程序要與其他應用程序競爭系統資源時 — 其中有些應用程序對于用戶的日常行為而言比您的應用程序更加重要。

確保應用程序廣受歡迎的途徑之一是保證它節省系統資源。在 Android 中,使用和保持系統資源的機制都是 Activity 類。您越了解這個基本類(與 Java Servlet 十分相似)的生命周期,調整 Android 移動應用程序的資源使用與性能的能力就越強。

我們將從快速了解 Activity 類生命周期開始。通過一個示例應用的演示,您將了解處理 Android 應用程序生命周期內每個階段的方法。掌握這些方法協同工作的原理之后,就能聰明地使用系統資源。然后更新演示應用程序的導航系統,使用 操作圖標 代替菜單按鈕來實現用戶交互。圖標在移動應用程序 UI 中是十分標準的,而較新的 Android 設備(版本 4.2.2 及更高的版本)已經棄用了選項菜單,而改用操作欄。掌握如何將這些特性與您的 Android 移動應用程序集成在一起將使您受益無窮!

Activity 類生命周期

Activity 的生命周期直接對應著 Android 移動應用程序的生命周期。當用戶與應用程序或運行應用程序的設備進行交互時,Android 平臺將在 Activity 實例上執行回調。當用戶啟動應用程序時,初始的 Activity 將執行一個已定義的生命周期。當應用程序轉入后臺時,它執行生命周期的一個不同階段,而當應用程序關閉時則執行另一個階段。圖 1 顯示了每個交互階段的 Android Activity 生命周期。

圖 1. Android 的 Activity 生命周期

圖展示了 Android 移動應用程序的 Activity 生命周期。

Android 移動應用程序生命周期包含四個階段:

  • 啟動
  • 暫停與恢復
  • 停止與重啟
  • 銷毀

后面的內容將會講述每個階段及其回調方法(可在 Activity 實例內部實現)。

Activity 生命周期中的啟動

演示應用程序

如果您一直關注本系列文章,那么在本系列的第一和第二篇文章中已經創建了自己的演示應用程序。如果沒有演示應用程序,建議您在繼續之前創建一個。另外,您還可以復制我自己的 Overheard Word 演示應用程序的 Git 庫。

在 前面的文章中,您已經使用了對應啟動 Activity 的回調方法,即 onCreate。您可能也熟悉 onStartonResume,啟動時也會調用這兩個方法。現在,在 Activity 生命周期的上下文中考慮這些方法。

在 Eclipse Android 開發環境中,選擇 Override/Implement Methods... 選項即可輕松重寫方法,如 圖 2 中所示。

圖 2. 重寫 Activity 生命周期回調方法

在 Eclipse 中重寫 actvity 生命周期回調方法的屏幕截圖。

接下來,選擇 onStartonResume 方法:

圖 3. 選擇回調

在 Eclipse 中選擇回調的屏幕截圖。

現在使用 Android 的 Log 類加入一些跟蹤語句,就像我在 清單 1 中所做的那樣。

清單 1. 實現 Android Activity 回調

  1. @Override 
  2. protected void onResume() { 
  3.     super.onResume(); 
  4.     Log.d("overheardword""onResume Invoked"); 
  5.  
  6. @Override 
  7. protected void onStart() { 
  8.     super.onStart(); 
  9.     Log.d("overheardword""onStart Invoked"); 

啟動應用程序的一個實例并通過 LogCat 查看日志,對結果進行檢查,如 圖 4 中所示。

圖 4. LogCat 的調試語句

Logcat 的調試語句屏幕截圖。

Android 使用 LogCat 記錄日志

Android 擁有自己的日志記錄系統 android.util.Log。借助這個方便的類,您可以記錄各種水平(比如 infowarndebug 等)的日志,然后通過 Android SDK 自帶的 logcat 工具查看日志。在 Eclipse 中,您應該將 LogCat 看作一個選項卡,可以使用它過濾標簽和應用程序實例。LogCat 還支持在設備上訪問日志,只要將設備插入臺式機或筆記本電腦的 USB 插口即可。

您很可能已經猜到,首次加載應用程序時將調用 onCreate,而在其他階段的上下文中使用 onStartonResume 更加方便,比如當應用程序轉入后臺和重啟時。

Activity 生命周期中的暫停與恢復

因 為移動設備通常會運行多個應用程序,而它們會以各種方式來吸引用戶的注意力,因此您的應用程序應該知道何時讓另一個應用程序占據設備屏幕并使用更多資源。 有時,用戶在使用應用程序時需要接電話,或者是應用程序可能會彈出一個對話框,比如信息請求或錯誤消息。上述每種操作都將部分地阻斷當前的 Activity

當一個 Activity 被部分阻斷時,將調用 onPause 方法。當暫停的 Activity 重新獲得焦點時,將調用 onResume。暫停與恢復表示受影響的活動被部分阻斷,而非完全隱藏。

當應用程序完全隱藏時,例如用戶打電話,還會調用 onPause,但在這種情況下還會繼續調用 onStop。當應用程序再次轉入前臺時,將先調用 onRestart,再調用 onStart,最后調用 onResume

下面解釋實現 onPauseonRestartonStop 時發生的事情。如果您已經有了本系列文章中使用的 Android 應用程序,那么在代碼中添加一些日志語句,然后運行應用程序。按下 Home 按鈕完全隱藏實例,然后單擊它的圖標再次運行。您應該看到調用了一系列方法。首先看到的是 onPause,然后是 onStop。 單擊圖標重新運行應用程序時,調用的方法依次是 onRestartonStartonResume

銷毀 Activity 也是運行應用程序的常規過程中會發生的事情。例如,可以調用 Activity 實例的 finish 方法來終止該實例。這里的關鍵在于,因為關閉了一個 Activity,所以它將遵循與被隱藏相同的生命周期,但它最后會回調 onDestroy

在 清單 2 中,我使用自己的 Overheard Word 應用程序演示了這個過程,具體做法是在向上劃動手勢時調用了 finish 方法。

清單 2. 銷毀 Activity 實例

  1. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
  2.    try { 
  3.        final SwipeDetector detector = new SwipeDetector(e1, e2, velocityX, velocityY); 
  4.        if (detector.isDownSwipe()) { 
  5.         return false
  6.        }else if (detector.isUpSwipe()) { 
  7.         finish(); 
  8.        }else if (detector.isLeftSwipe()) { 
  9.         Toast.makeText(getApplicationContext(), "Left Swipe", Toast.LENGTH_SHORT).show(); 
  10.        }else if (detector.isRightSwipe()) { 
  11.         Toast.makeText(getApplicationContext(), "Right Swipe", Toast.LENGTH_SHORT).show(); 
  12.        } 
  13.    } catch (Exception e) { 
  14.        // nothing 
  15.    } 
  16.    return false

最常用的 Activity 生命周期方法是 onCreateonRestartonDestroy。例如,我使用了 onRestart 來刷新應用程序 UI 視圖的眾多方面之一,并使用 onDestroy 釋放到數據庫的連接,比如 Android 設備上本地運行的 SQLite。

現在可能還不明顯,但一旦開始與外部資源協作 — 比如外部 Web 服務或設備的文件系統或數據庫 — 這些生命周期階段將變得十分重要。

接下來解釋如何使用兩個 Activity hook 方法 —onCreateOptionsMenuonOptionsItemSelected— 實現應用程序菜單行為。讓這兩個方法同步后,我們將把它們的功能連接到圖標,以實現額外的 UI 效果。

使用菜單與動作進行導航

當我在 Eclipse 中創建 Overheard Word 項目時,定義的第一個 Activity 有一個存根方法 onCreateOptionsMenu。正如您猜想的那樣,此方法用于創建一個選項菜單。在老式的 Android 設備上,選項菜單由 Menu 按鈕表示。在較新的設備上,它被表示為一系列垂直的點,顯示在應用程序本身之中。較新的 Android 設備不一定有菜單按鈕。

在表示老式設備的模擬器實例中,有一個名為 "Menu" 的按鈕。只要單擊它,應用程序實例就會顯示選項菜單。在這個例子中,我們將看到用于導航的選項。例如,如果用戶按下 Home 按鈕,就會看到如 圖 5 中所示的內容。

圖 5. 一個未實現的菜單項

一個屏幕截圖,表示 Android 模擬器中顯示的未實現的菜單項。

平板電腦上沒有菜單按鈕。用戶無法從 菜單 中選擇項目,而是被要求發起各種 操作。這個較新的 UI 欄稱為 操作欄,如 圖 6 中所示。

圖 6. Android 的新操作欄

Android 模擬器中的 Android 新操作欄。

盡 管菜單按鈕與操作欄的行為方式很類似,但操作欄只在較新的設備上能實現。由于我們的目標是老版本的 Android 系統(記住,約有 50% 的 Android 設備運行 Gingerbread!),因此我將使用更加熟悉的菜單按鈕進行演示。稍后,我將說明如何更新導航代碼以實現操作欄,滿足您以較新版本的 Android 及對應設備為目標的愿望。

創建一個選項菜單

為了翻新 Overheard Word 以提高用戶交互的效率,第一步最好是實現選項菜單,讓用戶能退出應用程序。退出應用程序是 Activity 生命周期的階段之一,因此我們將使用 Activity 方法實現這個功能。

記住,在 Android 應用程序中,所有與 UI 相關的業務都對應一個 XML 文件,因此定義 UI 的方法就是編輯布局的 XML 文件。Android 應用程序的 XML 文件位于項目的 res 文件夾的特定目錄中(例如,布局文件位于 layout 目錄中)。

為了快速進行練習,可以看一看 Overheard Word 主活動中 onCreateOptionsMenu 方法的默認實現方法 — 您看出了什么門道?

  1. public boolean onCreateOptionsMenu(Menu menu) { 
  2.   getMenuInflater().inflate(R.menu.overheard_word, menu); 
  3.   return true
  4.  } 

如果您正在考慮查找 menu 資源目錄中一個名為 overheard_word.xml 的 XML 文件,那么您就離成為一名 Android 專家不遠了!

我... 退出!

接下來,我們將編輯菜單資源 XML 文件,添加一個名為 quit 的菜單項。一開始需要在您的 res/values 目錄中找到 strings.xml 文件。找到之后,創建一個如下所示的新項:

<string name="quit_menu">Quit</string>

這個標記定義了單詞 Quit,可以通過標識符 quit_menu 來引用它(順便說一句,這對于應用程序的國際化很有好處)。接下來,打開 menu 目錄中的 overheard_word.xml 文件。 在這個文件中,將標題修改為 @string/quit_menu,從而將單詞 Quit 鏈接到菜單項。

現在,啟動模擬器并按下 Menu 按鈕。應該看到一個菜單出現在屏幕下方,其中有一個選項:Quit。但選擇它什么效果也沒有,因為目前還沒有實現它。

我們將在一分鐘內為 Quit 選項添加實現代碼。但首先,我們要考慮移動應用程序的任意功能部分的另一重要元素,即它的外觀。您可能已經注意到,如今大量移動 UI(甚至越來越多的 Web 應用程序 UI)都使用圖標進行導航。下面將說明如何使用免費圖標替換通用詞按鈕。

移動 UI 設計中的圖標

在進入移動開發領域之前,我對圖標也有涉獵,但很少在我的企業應用程序中使用它們。當 Web 應用程序的交互性開始變得更加突出時,我發現自己使用圖標的次數也在增加。但直到我開始從事移動開發,圖標才真正成為我的工作重點。

我的圖標在哪里?

如今,要尋找在開源與商業應用中使用的免費圖標是件很容易的事。您還可以支付一點點費用,購買某些圖標的使用權。我個人喜歡一個名為 Glyphish 的包,其中包含數百個圖標可供選擇,而且許可費用非常合理。Glyphish 還提供一個免費的許可證。建議您快速搜索和查找希望在本文中用于演示的圖標。

如 果在 Android 移動 UI 設計中使用圖標,需要充分了解設備的分辨率。Android 設備生態系統非常龐大,您的應用程序可能需要在各種設備上運行,從低分辨率的小屏設備一直到配備 7 英寸大屏的高分辨率平板電腦。一個在手持設備上顯示效果良好的圖標,在平板電腦上可能顯得十分粗糙。

幸運的是,您可以控制應用程序圖標在不同設備上的外觀。快速訪問 Android 移動應用程序的 res 目錄。您應該可以看到一些名為 drawable-something-pdi 的目錄(這里的 "something" 是任意字母序列)。這些目錄對應各種設備屏幕的分辨率。在這些目錄中放置大小正確的圖標與其他圖像文件,可以確保您的圖標在不同類型的設備上正確顯示。

例如,對于分辨率超高的設備,Android 將使用 drawable-xxhdpi 目錄中的圖標。此目錄中的啟動圖標應該為 96 x 96 像素,并且至少為 320 dpi。drawable-ldpi 目錄中的啟動圖標應該為 36 x 26 像素和 120 dpi。您也可以選擇創建一個默認的 drawable 目錄,當 Android 無法找到指定圖標分辨率對應的文件時,將使用此目錄下的圖標。

為了簡單起見,我將為我的 Overheard Word 應用程序創建一個 drawable 目錄。我在此目錄中放置一個 26 x 26 的圖標文件(.png 格式),用于退出選項。

圖 7. 為 drawable 目錄添加一個圖標

Eclipse 中 drawable 目錄的屏幕截圖。

我的下一個步驟是在選項菜單中引用該圖標,具體做法是在我的 overheard_word.xml 文件中更新 menu 項,如下所示:

  1. android:icon="@drawable/quit_icon" 

如果您嚴格遵循我的步驟,則應更新同一元素的 id。為它指定一個描述性的字符串值,如下所示:

  1. android:id="@+id/quit_item" 

進行下一個步驟,即在 onOptionsItemSelected 方法內部實現退出行為時,使用一個描述性的、易于理解的字符串值是很有幫助的。我們將能夠通過 quit_item 的 ID 在選擇事件中引用菜單項。現在啟動模擬器并按下 Menu 按鈕。我認為您會喜歡所看到的情景!

圖 8. 好圖標!(由 Glyphish 提供)

一個屏幕截圖,表示 Android 模擬器中 Overheard Word 的新 Quit 圖標

實現菜單行為

現在我有一個外觀漂亮的圖標,可以用于 Quit 菜單項(我希望您也有一個圖標用于自己的應用程序),但我仍然需要添加代碼,從而告訴應用程序當按鈕被按下時應該做什么。

實現選項菜單中的任意行為都要從重寫 onOptionsItemSelected 方法開始。因此重寫該方法,然后更新代碼,使其看起來像下面這樣(但記住要針對您自己的應用程序調整菜單項 ID):

清單 3. 處理菜單項選擇

  1. public boolean onOptionsItemSelected(MenuItem item) { 
  2.     switch (item.getItemId()) { 
  3.     case R.id.quit_item: 
  4.         this.finish(); 
  5.         return true
  6.     default
  7.         return super.onOptionsItemSelected(item); 
  8.     } 

注意,這只是一條簡單的 switch 語句。如果選擇 quit_itemid,將調用 finish 方法來關閉應用程序。

在模擬器中試用這段新代碼:按 Menu 按鈕,選擇退出(X)選項,并觀察 LogCat 上出現的內容。您應該看到一個完整的 Activity 生命周期,依次分為如下幾個階段:onPauseonStoponDestroy

Android 3.x 中的操作欄

如前所述,較新版本的 Android(Honeycomb 及更高版本)使用操作欄取代了選項菜單。較新的設備甚至不一定有 Menu 按鈕,因此了解應用程序的導航(或其他功能)也能用在操作欄中。

確保通過為選項菜單編碼而實現的導航功能也能用在操作欄中,并不需要做很多工作。您已經實現了所有需要的方法,剩下的工作只是對 XML 源文件進行一些修改。

首先需要創建一個模擬器實例,用于模擬使用操作欄而非菜單按鈕的設備。最簡單的做法是模擬一臺平板電腦。在 Android SDK 安裝中啟動 Android SDK Manager 命令行應用程序(是位于 tools 目錄中的 android 命令)。SDK Manager 啟動并運行后,從 Tools 菜單選擇 Manage AVDs... 選項。這將顯示一個對話框,在其中可以定義一個新的模擬器或 Android Virtual Device(或 AVD)。選擇 7.0'' WSVGA (Tablet) (1024 x 600: mdpi),然后將模擬器的目標設定為至少 Android 4.2.2。完成后,您就有了一個不響應菜單按鈕的模擬器,如 圖 9 中所示。

圖 9. 創建一個平板電腦模擬器

一個屏幕截圖,表示模擬平板設備的選項。

接 下來,在該平板電腦實例中啟動您的應用程序。您應該在右下角看到一條由三個點組成的垂直線。它看起來很棒,對嗎?默認情況下,Android 將保留菜單行為,甚至在較新的顯示設備中也是這樣。通過更新應用程序的 XML 資源,您可以升級操作欄的外觀與行為,讓它變得更加自然。

從應用程序的 AndroidManifest.xml 文件開始,您將在該文件中更新 SDK 目標:

  1. <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="17" /> 

接下來,在 Eclipse 中進入您項目的 Properties 頁面,并將 Project Build Target 更新為高于 Android 4.2.2 的任意 Android 版本。單擊 OK 并讓項目重新編譯。然后在 menu 目錄中找到菜單 XML 文件。更新它的內容,如下所示,這將保留 Quit 的 item 定義。

  1. android:showAsAction="always" 

最后,如果您的項目在 res 目錄下沒有兩個名為 values-v11values-v14 的子目錄,那么創建它們。接下來,在 values-v11 目錄中添加以下 XML 文件:

  1. <resources> 
  2.  <style name="AppBaseTheme" parent="android:Theme.Holo.Light"></style> 
  3. </resources> 

values-v14 目錄中,添加此文件:

  1. <resources> 
  2.  <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"></style> 
  3. </resources> 

現在重啟模擬器,您的新圖標應該出現在右上角:

圖 10. 一個帶圖標的操作欄

新圖標綠色機器人的屏幕截圖。

現在回到 menu 目錄中的菜單文件(其中定義了 quit 項),將 showAsAction 更改為 never。重新運行您的應用程序,應該可以在右上角看到這三個垂直的點。

不要忘記重新設定

注意,如果希望將應用程序目標保持為 Gingerbread,您需要重新設定項目的編譯目標并撤消本節內容中對 XML 文件所做的更改。這些更改無法做到向后兼容!

圖標的更多樂趣

迄今為止,您已經為以 Gingerbread 為目標的應用程序添加了一個菜單選項,看到它被十分完美地轉換到實現操作欄的新設備上,并了解如何通過對應用程序的 XML 文件進行一些更新來升級該功能(如果您選擇這樣做)。

現在,讓我們總結一下您學到的關于圖標的內容。您已經完成了為應用程序的導航菜單添加一個圖標的主要工作,因此更新它的 main 圖標應該沒什么問題。對用戶而言,這個圖標就代表著您的應用程序,因此必須知道如何更新和定制它。

我將更新 Overheard Word 的圖標,您也可以對自己的應用程序這樣做。再說一遍,在 Internet 上進行快速搜索可以找到大量的圖標站點。在這些站點中,我發現了一個有趣的圖標集合,其中有一個圖標確實深受我的喜愛:

圖 11. 一個漂亮的新圖標

[[120663]]

回想一下,這個圖標在不同的設備配置文件上呈現不同的效果。我希望確保用戶對 Overheard Word 產生良好的第一印象,因此讓圖標分辨率適合我的目標設備范圍是很有必要的。幸運的是,我知道一個真正好用的站點,可以幫我實現這個目標。

投資圖標

使用免費圖標達到演示目的沒有問題,但為了專業應用程序而投資定制圖標是絕對有必要的。圖標(或圖標集)體現了您應用程序的品牌,您希望它是獨一無二的。如果它很一般,或者看起來明顯很業余,用戶會對您的應用程序做出什么結論呢?

Android Asset Studio是一個 Google Code 項目,擁有大量可為 Android 開發人員提供助力的實用工具。我使用頻率很高的一個工具是 Launcher Icons。我要做的就是單擊 Launcher Icons 鏈接,然后上傳我的圖標。該實用工具會針對各種設備配置文件生成正確尺寸的圖標文件,然后我可以 zip 文件的格式下載它。該文件包含四個目錄,每個目錄下都包含一個我上傳文件的特定分辨率與尺寸的版本。

圖 12. Launcher Icons 為 Android 制作尺寸正確的圖標

Launcher Icons 為四臺不同的 Android 設備提供大小正確的圖標。

接下來,我將每個目錄中的 ic_launcher.png 文件復制到我應用程序的 res 文件夾的相同子目錄中。注意,在此過程中,我可能會替換 Eclipse 生成的原始圖標文件。

最后,我再次運行應用程序,并等它出現在我的模擬器實例中。我單擊 Home 按鈕,然后查看結果:一個漂亮的應用程序圖標(對我而言)標志著 OverHeard Word 是所有用戶設備上最有趣的應用程序!

圖 13. 現在變得很形象!

Overheard Word 的新主要圖標在設備的應用程序菜單中看起來非常引人注目。

結束語

在本文中,您了解了 Activity 的生命周期,并知道如何使用它來改進應用程序對設備資源的利用。您還學會了如何使用菜單和操作欄定義與實現導航構件,以及如何使用圖標替換單詞按鈕。

您 在本文中學到的所有內容對于構建 Android 應用程序都是至關重要的。Android 上的移動開發很容易上手,當然也樂趣無窮,但我希望您也要明白它與您所熟悉的 Java 開發屬于不同范式。Google Play 與其他應用程序商店中存在著成千上萬個應用程序,因此通常只有規劃良好、設計用心和編碼精妙的應用程序才能名列前茅。要學的地方還有很多!

責任編輯:閆佳明 來源: ibm
相關推薦

2015-07-09 15:42:48

ios應用生命周期

2009-06-24 10:34:39

JSF生命周期JSF應用程序

2013-07-31 14:50:32

Windows PhoWP應用程序生命周期

2014-07-11 11:09:10

App應用程序生命周期

2011-07-20 15:58:58

iPhone 應用程序 生命周期

2011-08-10 16:50:10

iPhone生命周期

2013-09-26 11:20:34

Informatica

2012-05-28 15:37:20

WP程序生命周期

2012-08-16 09:38:38

ASP.NET

2010-08-01 15:29:04

AndroidDalvik

2014-02-24 10:50:32

DevOps云應用

2025-04-28 01:22:00

2023-12-21 08:00:00

ChatGPT人工智能大型語言模型

2010-04-02 09:02:02

ASP.NET MVC

2013-05-03 16:37:25

網絡設備生命周期品質

2020-04-02 14:29:21

云安全派拓網絡Palo Alto N

2012-06-20 10:29:16

敏捷開發

2011-06-16 09:31:21

ActivityAndroid

2014-07-16 13:39:30

Windows Pho

2015-07-08 16:28:23

weak生命周期
點贊
收藏

51CTO技術棧公眾號

五月天婷婷丁香| 原创真实夫妻啪啪av| 成年人在线看| 国产一区二区在线观看免费| 国内精品400部情侣激情| 亚洲专区区免费| 成人精品在线| 色综合一个色综合| 蜜臀av.com| 国产专区在线播放| 国产成人av电影| 国产精品久久久久久久久久久久久久| 色在线观看视频| 精品国产a一区二区三区v免费| 欧美视频一二三区| 97成人在线免费视频| 香蕉视频网站在线观看| 91一区二区在线| 亚洲在线免费看| 欧美brazzers| 国产精品尤物| 欧美国产精品人人做人人爱| ass极品国模人体欣赏| 久久精品色综合| 欧美成人一区二区| 中文字幕第17页| 香蕉视频亚洲一级| 精品久久久久久久久国产字幕| 中国 免费 av| jizz亚洲| 久久精品视频网| 精品国产乱码久久久久软件| 国内精品国产成人国产三级| 免费成人在线观看视频| 日韩av第一页| 成人在线免费看视频| 亚洲经典在线| 欧美黑人性视频| 高h视频免费观看| 99热国内精品| 日韩亚洲欧美成人| 日本欧美一区二区三区不卡视频| 亚洲国产精品嫩草影院久久av| 欧美精品一区二区三区久久久| 亚洲 自拍 另类 欧美 丝袜| 欧洲精品久久久久毛片完整版| 91黄色免费看| 国产av无码专区亚洲精品| 国产一二在线播放| 五月天激情小说综合| 国产xxxx振车| 55av亚洲| 欧美午夜宅男影院在线观看| 日日摸日日碰夜夜爽无码| 美洲精品一卡2卡三卡4卡四卡| 一区二区成人在线视频| 国产一级大片免费看| 羞羞视频在线观看不卡| 亚洲一区中文日韩| av无码久久久久久不卡网站| xxx性欧美| 欧美视频中文在线看| 日日摸日日碰夜夜爽av| 二吊插入一穴一区二区| 欧美性欧美巨大黑白大战| 国产九九在线视频| 色婷婷成人网| 日韩一区二区三| www.男人天堂| 九色精品国产蝌蚪| 日韩专区中文字幕| 青青草原国产视频| 亚洲精品日韩久久| 日韩免费精品视频| 一级黄色片免费看| 粉嫩aⅴ一区二区三区四区五区| 国产精品一区二区三区在线| 日韩福利一区二区| 中文字幕av不卡| 99久re热视频精品98| 超碰99在线| 在线国产亚洲欧美| 亚洲高清av一区二区三区| 懂色av一区二区| 亚洲欧美一区二区三区四区 | 国产精品第5页| 免费成人在线网站| 国产一区不卡在线观看| 岛国在线大片| 亚洲一级二级三级| 九色porny91| 视频精品一区二区三区| 亚洲精品日韩在线| 欧美国产日韩在线观看成人 | 亚洲人成网站色在线观看| 激情五月婷婷六月| 最新欧美电影| 日韩欧美国产综合在线一区二区三区 | 久久人妻一区二区| 精品日韩免费| 久久久久久久久久久网站| 午夜精品一区二| 国产高清亚洲一区| 日韩不卡av| 欧美四级在线| 欧美日韩一级片网站| xxxwww国产| 欧美高清视频在线观看mv| 97在线免费观看| 国产日韩欧美视频在线观看| 久久久精品蜜桃| 免费人成自慰网站| 国产美女视频一区二区| 亚洲人成电影在线| 激情五月色婷婷| 国产麻豆成人精品| 亚洲人成网站在线播放2019| 瑟瑟视频在线看| 欧美刺激脚交jootjob| 国产精品麻豆免费版现看视频| 亚洲三级毛片| 超碰97人人人人人蜜桃| 女女色综合影院| 欧美亚洲免费在线一区| 在线免费观看污视频| 欧美在线国产| 成人日韩av在线| av一本在线| 一本大道久久a久久精品综合| 天天躁日日躁狠狠躁av| 欧美一区网站| 91久久精品国产91久久| 91网页在线观看| 91国内精品野花午夜精品| 无码一区二区精品| 亚洲另类黄色| 国产一区二区黄色| av影院在线| 欧美精品一区二区三| 久久久久国产精品夜夜夜夜夜| 久久超碰97中文字幕| 日韩久久不卡| 香蕉视频亚洲一级| 一区二区三区四区在线观看视频| 亚洲乱码国产乱码精品| 91免费看片在线观看| 国产黄色片免费在线观看| 久久综合给合| 欧美另类xxx| 亚洲精品国产av| 一区二区三区小说| 亚洲v在线观看| 亚洲大片在线| 免费日韩av电影| 欧洲一级精品| 色偷偷噜噜噜亚洲男人| 一区二区三区黄| 亚洲日本va在线观看| 日本亚洲一区二区三区| 伊人久久大香线蕉综合热线| 国产在线精品一区二区中文 | 亚洲18女电影在线观看| 亚洲麻豆一区二区三区| 日韩亚洲精品在线| 美女一区视频| 欧洲精品久久久久毛片完整版| 少妇高潮久久77777| 国产美女永久免费| 亚洲午夜精品网| 黄瓜视频污在线观看| 免费高清在线一区| 日本精品福利视频| 欧美午夜18电影| 国产精品久久久久秋霞鲁丝| 久cao在线| 亚洲大胆人体av| 波多野结衣一区二区三区在线| 国产精品素人视频| 91性高潮久久久久久久| 宅男噜噜噜66一区二区| 日韩一区国产在线观看| 久久天天久久| 欧美极度另类性三渗透| 国产特黄在线| 欧美一区二区黄色| 在线天堂中文字幕| 自拍av一区二区三区| 国产一级免费片| 日本在线不卡一区| 97久久国产亚洲精品超碰热| 亚洲宅男一区| 97在线资源站| 日韩在线短视频| 欧美精品成人在线| a天堂中文在线| 亚洲国产欧美一区二区三区同亚洲| 日本中文字幕在线观看视频| 亚洲免费av在线| 美女爆乳18禁www久久久久久 | 免费毛片视频网站| 国产在线精品免费av| 黄色动漫网站入口| 综合精品久久| 日本一区精品| 国产精品宾馆| 成人黄色短视频在线观看| 天堂av中文在线观看| 久久国产精品亚洲| 91caoporn在线| 日韩成人中文电影| 国产黄频在线观看| 欧美日韩一区久久| www日韩精品| 一区二区三区在线播| 国产三级精品三级观看| 久久综合资源网| 中文字幕第九页| 激情综合五月婷婷| 午夜欧美福利视频| 亚洲一区成人| 高清欧美精品xxxxx| 亚洲一区色图| 在线视频91| 欧美美女一区| 欧美一区二区三区四区五区六区| 国产丝袜一区| www.久久草| 久久一级大片| 91在线无精精品一区二区| 国产精品伦一区二区| 国产91色在线|免| 色戒汤唯在线| 97在线视频观看| 136福利第一导航国产在线| 九九热精品视频国产| 美女av在线播放| 久久精品国产精品亚洲| av影片在线看| www.亚洲人.com| 国产美女福利在线| 久久精品亚洲精品| av超碰免费在线| 欧美另类在线播放| 日本大片在线播放| 欧美激情a在线| 国精产品一区一区三区mba下载| 久久成人这里只有精品| 主播国产精品| 欧美国产日韩视频| 美足av综合网| 欧美在线视频免费播放| 日韩大尺度黄色| 国产精品十八以下禁看| 欧洲午夜精品| 91精品国产91久久久久青草| 51精品国产| 精品久久久久亚洲| 任你躁在线精品免费| 欧洲成人一区二区| 久久影院一区| 久久人妻无码一区二区| 国产日韩1区| 漂亮人妻被中出中文字幕| 巨乳诱惑日韩免费av| 午夜免费福利在线| 国产乱淫av一区二区三区| 欧美做受高潮中文字幕| 久久色在线视频| 色撸撸在线视频| 一个色综合av| 亚洲AV无码成人精品区东京热 | 精品毛片在线观看| 亚洲精品国产电影| 国产在线视频你懂得| 日韩在线观看免费高清| 久久久123| 国产激情视频一区| 国产精品亚洲一区二区在线观看| 国产精品播放| 欧美码中文字幕在线| 大胆欧美熟妇xx| 久久资源在线| 中文字幕av一区二区三区人妻少妇| 99视频一区二区三区| 长河落日免费高清观看| 亚洲永久精品大片| 亚洲欧美日韩一区二区三区四区| 欧美一级理论片| 欧美在线一卡| 欧美裸身视频免费观看| 性欧美hd调教| 国产精品swag| 91久久电影| 国产成人亚洲精品无码h在线| 久国产精品韩国三级视频| 精品人妻一区二区免费视频| 中文在线资源观看网站视频免费不卡| 久久久久久久久毛片| 色一情一乱一乱一91av| 亚洲va欧美va| 中文字幕日本精品| 少妇视频在线观看| av一区和二区| 99久久婷婷国产综合精品电影√| 国产一区二区在线视频播放| 精久久久久久久久久久| 一区二区三区四区免费| 一区二区久久久| 国产免费高清视频| 亚洲人成电影在线观看天堂色| 国内老司机av在线| 91在线无精精品一区二区| 日产精品一区二区| www.四虎成人| av一二三不卡影片| 青青草手机在线视频| 欧美日本一道本| h视频网站在线观看| 欧美与欧洲交xxxx免费观看| 国产精品45p| 97碰在线视频| 国产激情精品久久久第一区二区| 香蕉久久久久久久| 日本福利一区二区| 日本在线视频1区| 97在线视频精品| 爱高潮www亚洲精品| 69精品丰满人妻无码视频a片| 蜜桃av噜噜一区| 天天干天天操天天拍| 欧洲精品一区二区| 国产三级视频在线看| 日本久久久久久久久| 亚洲小说图片| 丰满人妻中伦妇伦精品app| 不卡的av在线播放| 男人的天堂一区| 日韩久久免费电影| 国产精品高颜值在线观看| 国产69精品久久久久9999apgf| 综合久久婷婷| 久久久国产精品久久久| 亚洲一区二区三区精品在线| 超碰免费在线97| 久久久久久久999| 成人黄色av网址| 男人添女人下面高潮视频| av一区二区不卡| 波多野结衣啪啪| 在线午夜精品自拍| 日韩在线你懂得| 青青草影院在线观看| 国产jizzjizz一区二区| 国产精品7777| 亚洲欧美日韩久久久久久 | 欧美天天综合网| 色欧美激情视频在线| 91久久国产精品91久久性色| 国产精品二区影院| 91丨porny丨对白| 欧美性20hd另类| 亚洲欧美视频一区二区| 91在线视频成人| 日韩视频一区二区三区在线播放免费观看| 无码精品一区二区三区在线播放| 在线亚洲+欧美+日本专区| 视频三区在线| 国产高清精品一区二区三区| 国产亚洲高清视频| 欧美一区二区三区粗大| 91精品国产一区二区三区蜜臀 | 精品国产电影一区| 黄色国产在线| 亚洲一区制服诱惑| 一本色道久久综合一区| 永久免费av无码网站性色av| 欧美精品一二三区| 96av在线| 亚洲欧美日韩国产成人综合一二三区| 国产一区二区三区在线看麻豆 | 欧美日韩一区三区| 国产嫩草在线视频| 视频在线精品一区| 国产成人日日夜夜| 91青青草视频| 欧美精品激情在线| 精品无人区麻豆乱码久久久| 久久久精品人妻一区二区三区| 一本久道中文字幕精品亚洲嫩 | 人人做人人澡人人爽欧美| 久久视频国产| 在线视频 日韩| 6080yy午夜一二三区久久| 桃色av一区二区| 亚洲av首页在线| 国产欧美一区视频| 人妻91麻豆一区二区三区| 国产在线拍揄自揄视频不卡99| 亚洲三级观看| 九九免费精品视频|