Android進階之光-第1章-Android新特性-讀書筆記

第 1 章 Android 新特性

1.1 Android 5.0 新特性

1.1.1 Android 5.0 主要新特性

1. 全新的 Material Design 新風格

  Material Design 是一種大膽的平面化創新。換句話說,谷歌但願可以讓Material Design 給用戶帶來紙張化的體驗。這種新的視覺語言,在基本元素的處理上,借鑑了傳統的印刷設計,以及字體版式、網絡系統、空間、比例、配色和圖像使用等這些基礎的平面設計規範。另外,Material Design 還推崇實體隱喻理念,利用實體的表面與邊緣的質感打造出視覺線索。讓用戶感覺到真實性。熟悉的觸感讓用戶能夠快速地理解並認知。在設計中能夠在符合物理規律的基礎上靈活地運用物質,打造出不一樣的使用體驗。爲了吸引用戶的注意力,Material Design 還帶來了有意義並且更合理的動態效果,以及維持整個系統的連續性體驗。java

2. 支持多種設備

  Android 系統的身影早已出如今多種設備中。android

3. 全新的通知中心設計

  谷歌在 Android 5.0 中加入了全新風格的通知系統。改進後的通知系統會優先顯示對用戶來講比較重要的信息,而將不太緊急的內容隱藏起來。用戶只須要向下滑動就能夠查看所有的通知內容。web

4. 支持 64 位 ART 虛擬機(ART:Android runtime)

  Android 5.0 內部的性能上也提高了很多,它放棄了以前一直使用的 Dalvik 虛擬機,改用了 ART 虛擬機,實現了真正的跨平臺編譯,在 ART、X8六、MIPS 等無處不在。緩存

5. Overview

  多任務視窗如今有了一個新的名字,Overview 。在界面上,每個 App 都是一個獨立的卡片,擁有立體式的層疊效果,用戶能夠指定 「最近應用程序」,經過滑動來快速切換 App。安全

6. 設備識別解鎖

  Android 5.0 增長了針對特定設備(例如智能手錶)識別解鎖的模式。當設備沒有檢測到附近有可用的信任設備時,就會啓動安全模式以防止未受權訪問。網絡

7. Ok Google 語音指令

  只須要說出簡單的語言指令,就能操做手機。架構

8. Face unlock 面部解鎖

  在 Android 5.0 中,Google 花費大力氣優化了面部解鎖功能。當用戶拿起手機處理鎖屏界面上的消息通知時,面部解鎖功能便自動被激活。app

1.1.2 替換 ListView 和 GridView 的 RecyclerView

  有了 ListView、GridView,爲何還須要 RecyclerView 這樣的控件呢?從總體上看,RecyclerView 架構提供了一種插拔式的體驗,它具備高度的解耦、異常的靈活性和更高的效率,經過設置它提供的不一樣 LayoutManager、ItemDecoration、ItemAnimator 可實現更加豐富多樣的效果。可是 RecyclewView 也有缺點和讓人頭疼的地方:設置列表的分割線須要自定義,另外列表的點擊事件須要本身去實現。框架

1. 配置 build.gradle

  要想使用 RecyclerView,首先要倒入 support-7 包。工具

2. 使用 RecyclerView

  與 ListView 不一樣的一點就是,須要設置佈局管理器用於設置條目的排列樣式,能夠是垂直排列或者水平排列。

  此外,RecyclerView 比 ListView 的設置要複雜一些,主要是它須要本身去自定義分割線,設置動畫和佈局管理器,等等。

  RecyclerView 的 Adapter 最大的改進就是對 ViewHolder 進行了封裝定義,只須要自定義一個 ViewHolder 繼承 RecyclerView.ViewHolder 就能夠了。另外,Adapter 繼承了 RecyclerView.Adapter,在 onCreateViewHolder 中加載佈局,在 onBindViewHolder 中將視圖與數據進行綁定。

3. 設置分割線

  可使用 mRecyclerView.addItemDecoration() 來加入分割線。谷歌目前沒有提供默認的分割線,這就須要咱們繼承 RecyclerView.ItemDecoration 來自定義分割線。

  雖然沒有默認的分割線,可是好處是:能夠更靈活地自定義分割線。

4. 自定義點擊事件

  列表中條目的點擊事件須要本身來定義,這是一個不盡如人意的地方。可是,自定義點擊事件也並非很難。在 Adapter 中定義接口並提供回調。

5. 實現 GridView

  只須要自定義橫向的分割線。

6. 實現瀑布流

  RecyclerView 支持瀑布流,它更穩定、效率更高、自定義能力更強。

  實現瀑布流很簡單,只要在 Adapter 寫一個隨機的高度來控制每一個 item 的高度就能夠了。在 Adapter 的 onBindViewHolder 中設置每一個 item 的高度。

1.1.3 卡片 CardView

  Android 5.0 版本中新增了 CardView,CardView 繼承自 FrameLayout 類,而且能夠設置圓角和陰影,使得空間具備立體性,也能夠包含其餘的佈局容器和控件。

1. 配置 build.gradle

  若是 SDK 低於 5.0,仍舊要引入 v7 包。在 build.gradle 中引入 support-v7 包。

2. 使用 CardView

  CardView 的重要屬性:card_view:cardCornerRadius,設置圓角半徑:card_view:cardElevation,設置陰影的半徑。

  初次以外,CardView 還有其餘屬性:

  • CardView_cardBackgroundColor:設置背景色。
  • CardView_cardElevation:設置 Z 軸陰影。
  • CardView_cardMaxElevation:設置 Z 軸最大高度值。
  • CardView_cardUseCompatPadding:是否使用 CompadPadding。
  • CardView_cardPreventComerOverlap:是否使用 PreventCornerOverlap。
  • CardView_contentPadding;內容的 padding。
  • CardView_contentPaddingLeft:內容的左 padding。
  • CardView_contentPaddingTop:內容的上 padding。
  • CardView_contentPaddingRight:內容的右 padding。
  • CardView_contentPaddingBottom:內容的底 padding。

1.1.4 3 種 Notification

  Notification 可讓咱們在得到消息的時候,在狀態欄,鎖屏界面來現實相應的信息。

1. 普通 Notification

  普通 Notification 的建立。

2. 摺疊式 Notification

  摺疊式 Notification 是一種自定義視圖的 Notification,用來顯示長文本和一些自定義的佈局場景。它的兩種狀態:一種是普通狀態下的視圖(若是不是自定義的話,和上面普通 Notification 的視圖樣式同樣),另外一種是展開狀態下的視圖。和普通 Notification 不一樣的是,須要自定義視圖,而這個視圖現實的進程和咱們建立視圖的進程不在一個進程,因此須要使用 RemoteViews。

3. 懸掛式 Notification

  懸掛式 Notification 是 Android 5.0 新增長的方式。和前兩種顯示方式不一樣的是,前兩種須要下拉通知欄才能看到通知;而懸掛式 Notification 不須要下拉通知欄就直接顯示出來懸掛在屏幕上方,而且焦點不變,仍在用戶操做的界面,所以不會打斷用戶的操做。其過幾秒就會自動消失。和前兩種 Notification 不一樣的是,它須要調用 setFullScreenIntent 來將 Notification 變爲懸掛式 Notification 。

4. Notification 的顯示等級

  Android 5.0 加入了一種新的模式 Notification 的顯示等級,共有如下 3 種。

  • VISIBILITY_PUBLIC:任何狀況都會顯示通知。
  • VISIBILITY_PRIVATE:只有在沒有鎖屏時會顯示通知。
  • VISIBILITY_SECRET:在 pin、password 等安全鎖和沒有鎖屏的狀況下才能顯示通知。

  設置很是簡單,只要調用 setVisibility 方法就能夠了。

1.1.5 Toolbar 與 Palette

  Toolbar 是應用內容的標準工具欄,能夠說是 Actionbar 的升級版。這二者不是獨立關係,要使用 Toolbar,仍是得跟 Actionbar 有關係的。相比於 Actionbar,Toolbar 最明顯的一點就是變得很自由,可隨處放置,其具體使用方法和 Actionbar 很相似。

1. 引入 Toolbar

  引入 v7 支持包。

  爲了顯示 Toolbar 控件,先要在 style 裏把 Actionbar 去掉。

2. 自定義 Toolbar

  能夠設置 Toolbar 的標題和圖標以及 Menu Item 等屬性。Menu Item 的設置和 Actionbar 相似。

3. 添加 DrawerLayout 實現側滑

  使用 DrawerLayout 實現側滑。

4. Palette 的應用

  Android 5.x 用 Palette 來提取顏色,從而讓主題可以動態適應當前界面的色調,作到整個 App 顏色的基調和諧統一。Android 內置了幾種提取色調的種類:

  • Vibrant (充滿活力的)
  • Vibrant dark (充滿活力的黑)
  • Vibrant light (充滿活力的亮)
  • Muted (柔和的)
  • Muted dark (柔和的黑)
  • Muted light (柔和的亮)
      要使用 Palette ,須要引用 ‘com.android.support:palette-v7:23.0.1’。這在以前已經配置過了,實現提取顏色很是容易,只要將 bitmap 傳遞給 Palette,調用 generate 便可。在 onGenerated 回調中獲得圖片的色調。

1.2 Android 6.0 新特性

  6.0 新系統的總體設計風格依然保持扁平化的 Material Design 風格。Android 6.0 在對軟件體驗與運行性能上進行了大幅度的優化。據測試,Android 6.0 可以使設備續航時間提高 30%。

1.2.1 Android 6.0 主要新特性概述

1. 應用權限管理

  在 Android 6.0 中,應用許可提示能夠自定義了。它容許對應用的權限進行高度管理,好比應用可否使用位置、相機、網絡和通訊錄等,這些都開放給開發者和用戶。此前的 Android 系統的應用權限管理只能靠第三方應用來實現,在 Android 6.0 中應用權限管理成爲系統級的功能。

2. Android Pay

  Android Pay 是 Android 支付統一標準。Android 6.0 系統中集成了 Android Pay,其特性在於簡潔、安全和可選性。它是一個開放性平臺,用戶能夠選擇谷歌的服務或者使用銀行的 App 來使用它。Android Pay 支持 Android 4.4 之後的系統設備而且可使用指紋來進行支付。

3. 指紋支持

  雖然不少廠商的 Android 手機實現了指紋的支持,可是這些手機都使用了非谷歌認證的技術。這一次谷歌提供的指紋識別支持,旨在統一指紋識別的技術方案。

4. Doze 電量管理

  Android 6.0 自帶 Doze 電量管理功能。手機靜止不動一段時間後,會進入 Doze 電量管理模式。谷歌表示,當屏幕處於關閉狀態時,平均續航時間可提升 30%。

  Android 6.0 增強了軟件間的關聯,容許開發者將 App 和他們的 Web 域名關聯。

6. Now on Tap

  在桌面或 App 的任意界面,長按 Home 鍵便可激活 Now on Tap,它會識別當前屏幕上的內容並建立 Now 卡片。

1.2.2 運行時權限機制

  在 Android 6.0 時,將不會在安裝的時候授予權限;取而代之的是,App 不得不在運行時一個一個詢問用戶來授予權限。

1. Android 6.0 以前版本的應對之策

  Android 6.0 系統默認爲 targetSdkVersion 小於 23 的應用授予了所申請的全部權限,因此若是你之前的 App 設置的 targetSdkVersion 低於 23,在運行時也不會崩潰。

2. Normal Permissions 與 Dangerous Permission

  Google 將權限分爲兩類,一類是 Normal Permissions,這類權限通常不涉及用戶隱式,是無須用戶進行受權的,好比手機振動、訪問網絡等,這些權限只須要在 AndroidManifest.xml 中簡單聲明就好,安裝時就受權,無須每次使用時都檢查權限,並且用戶不能取消以上受權;另外一類是 Dangerous Permission,通常會設計用戶隱私,須要用戶進行受權,好比讀取 adcard、訪問通訊錄等。

Normal Permissions
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_NOTIFICATION_POLICY
android.permission.ACCESS_WIFI_STATE
android.permission.ACCESS_WIMAX_STATE
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BROADCAST_STICKY
android.permission.CHANGE_NETWORK_STATE
android.permission.CHANGE_WIFI_MULTICAST_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.KILL_BACKGROUND_PROCESSED
android.permission.MODIFY_AUDIO_SETTINGS
android.permission.NFC
android.permission.READ_SYNC_SETTINGS
android.permission.READ_SYNC_STATS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.REORDER_TASKS
android.permission.REQUEST_INSTALL_PACKAGES
android.permission.SET_TIME_ZONE
android.permission.SET_WALLPAPER
android.permission.SET_WALLPAPER_HINTS
android.permission.TRANSMIT_IR
android.permission.USE_FINGERPRINT
android.permission.VIBRATE
android.permission.WAKE_LOCK
android.permission.WRITE_SYNC_SETTINGS
com.android.alarm.permission.SET_ALARM
com.android.launcher.permission.INSTALL_SHORTCUT
com.android.launcher.permission.UNINSTALL_SHORTCUT

  Dangerous Permission

Permission Group Permissions
android.permission-group.CALENDAR android.permission.READ_CALENDAR android.permission.WRITE_CALENDAR
android.permission-group.CAMERA android.permission.CAMERA
android.permission-group.LOCATION android.permission.ACCESS_FINE_LOCATION android.permission.ACCESS_COARSE_LOCATION
android.permission-group.PHONE android.permission.READ_PHOTO_STATE android.permission.CALL_PHOTO android.permission.READ_CALL_LOG android.permission.WRITE_CALL_LOG com.android.voicemail.permission.ADD_VOICEMAIL android.permission.USE_SIP android.permission.PROCESS_OUTGOING_CALLS
android.permission-group.SENSORS android.permission.BODY_SENSORS
android.permission-group.SMS android.permission.SEND_SMS android.permission.RECEIVE_SMS android.permission.READ_SMS android.permission.RECEIVE_WAP_PUSH android.permission.RECEIVE_MMS android.permission.READ_CELL_BROADCASTS
android.permission-group.STORAGE android.permission.READ_EXTERNAL_STORAGE android.permission.WRITE_EXTERNAL_STORAGE

  同一組的任何一個權限被受權了,其餘權限也自動被受權。此外,對於申請時彈出的提示框上面的文本說明也是對整個權限組的說明,而不是單個權限的說明。

3. 實現支持運行時權限

  舉例獲取電話權限。

4. 處理「再也不詢問」選項

  若是用戶選擇了「再也不詢問」,那麼每次咱們調用須要訪問該權限的 API 時都會失效,這顯然不會帶來好的用戶體驗,因此咱們須要作的就是給用戶一個友好的提示。這時候須要使用 shouldShowRequestPermissionRationale 方法,這個方法能夠幫助開發者向用戶解釋權限的狀況。若是用戶選擇了「再也不詢問」選項,則 shouldShowRequestPermissionRationale 方法會返回 false,這時候就能夠彈出 AlertDialog 來提醒用戶容許訪問該權限的重要性。

5. PermissionDispatcher 框架的使用

  PermissionDispatcher 框架用來封裝請求權限。
 使用 PermissionDispatcher 的例子。

1.3 Android 7.0 新特性

1.3.1 Android 7.0 主要新特性概述

1. 多窗口模式

  Android 7.0 中支持多窗口多任務處理,你只要在一個應用程序中長按 Overview 按鈕,就能進入多窗口模式。在大屏幕設備中,同時打開兩個應用程序窗口顯然能夠提高執行效率。

2. Data Server

  Android 7.0 中引入了 Data Server 模式,它是一種流量保護機制。啓動 Data Server 模式時,系統將攔截後臺的數據使用,並在可能的狀況下減小前臺運行應用使用的數據量。例如限制流媒體服務的碼率,下調畫質,以及減小緩存等。而經過白名單設置,用戶可讓應用避免受到 Data Server 模式的影響。

3. 改進的 Java 8 語言支持

  Android 7.0 能夠支持 Java 8 語言平臺,使得 Android 的 Jack 編譯器如今可以有助於減小系統的冗餘代碼、下降佔用和運行時間。開發者能夠直接用 Lambda 表達式。

4. 自定義壁紙

  在 Android 7.0 中,能夠爲主屏幕設置壁紙,爲鎖屏設置另一張壁紙。

5. 快速回復

  Android 7.0 還支持通知欄直接回復的功能。值得注意的是,這個功能不只僅限於即時通訊應用,它還適用於諸如 Twitter 這樣的社交應用。

6. Daydream VR 支持

  Android 7.0 內置谷歌的全新 VR 平臺 Daydream。Daydream 是一個虛擬現實平臺,由 Daydream 頭盔、手柄和只能手機構成,支持 Daydream 的智能手機要知足必定的硬件要求。

7. 後臺省電

  Android 7.0 在後臺省電方面也作了不小的改進,屏幕關閉後全部的後臺進程都將會被系統限制活動,使這些應用不會在後臺中持續喚醒,從而達到省電的目的。此外,Project Svelte 功能也在持續地改善,這最大限度地減小了 Android 設備中系統和應用所佔用的內存。

8. 快速設置

  下拉通知欄頂部能夠展開快捷開關界面。在快捷開關界面右下角有個「編輯」(EDIT)按鈕,點擊以後便可自定義添加/刪除快捷開關,或拖動進行排序。

9. Unicode 9 支持和全新的 emoji 表情符號

  Android 7.0 支持 Unicode 9,而且新增了大約 70 種 emoji 表情符號。這些表情符號大多數都是人形的,而且提供不一樣的膚色。

10. Google Assistant

  Google Assistant 號稱融合了谷歌搜索的深度學習技術以及 Google Now 的我的信息學習技術,它可以分辨用戶的天然語言,並具有練習上下文的理解能力。它可以按照你的談話內容和習慣來調整本身的推薦建議,最終可以造成一種適合於用戶本人的模式,爲用戶的平常生活提供幫助。

1.3.2 多窗口模式

1. 進入多窗口模式

  進入多窗口模式有兩種方式:

  • 點擊手機導航欄最右邊的 Overview 按鈕進入 Overview 列表,長按列表中的活動窗口並拖入到屏幕最上方的分屏顯示區域。
  • 打開一個程序,長按 Overview 按鈕也能夠進入多窗口模式。
2. 多窗口模式的生命週期

  長按進入多窗口模式時,生命週期方法:onPause() -> onStop() -> onDestroy() -> onCreate() -> onStart() -> onResumt() -> onPause()。經歷了一個從新建立的過程,最終會停留在 onPause() 狀態,當點擊項目的窗口時,纔會獲取焦點進入 onResume 狀態。

  長按 Overview 按鈕退出多窗口模式,生命週期方法:onstop() -> onDestory() -> onCreate() -> onStart() -> onResume() -> onPause() -> onResume() 。先經歷了銷燬的過程,而後是一個從新恢復的過程,最終會停留在 onResume 狀態。

3. 禁用多窗口模式

  多窗口模式未必適用於全部應用。若是想要禁用多窗口模式,只須要在 AndroidManifest.xml 中加入以下屬性便可:

<application
    ...
    android:resizeableAcivity = "false"
    ...
</application>

  設置 android:resizeableAcivity 屬性爲 false ,當長按 Overview 按鈕想要進入多窗口模式時,會發現項目沒法進入多窗口模式,並會彈出 Toast 來提醒用戶當前應用不支持多窗口模式。

1.4 本章小結

相關文章
相關標籤/搜索