編者按:本文系 Google 的李寄超講師,在掘金技術社區主辦的《中美技術人才硅谷大講堂 | JTalk 掘金線下活動第六期》 活動上的分享整理。掘金 JTalk 目前已舉辦6期,每期 JTalk 會邀請垂直行業的優秀工程師來分享優秀的實踐經驗,技巧方法。旨在爲開發者提供線下技術交流互動機會,幫助開發者成長。網絡
李寄超現就任於 Android 開發團隊。畢業於弗吉尼亞大學,從事 Android 系統及軟件開發多年,曾在 Google Play 、 Search 和 Payment 負責多個項目,並屢次參加展會推廣 Android 以及 Google Play 。熱衷於瞭解開發者以及推廣 Android 生態。架構
咱們先來簡單回顧一下今年 I/O Keynote 都講了什麼?app
接下來,咱們說一些在本屆 I/O 上沒有特別細講的 Android P 的功能。post
首先是通知,咱們在 Android P 上作了許多通知上的優化,主要集中在 UI 上。一方面是圓角的優化,另外一方面是過去的一些空隙會更大一些。此外咱們還專門針對對話,也就是聊天的應用作了一些特別優化:你能夠直接在通知中聊天,也能夠直接在通知中放大查看圖片。下一個是 Remote Input ,至關於你能夠在裏面通知裏面設置快捷回覆語句而後直接發送。另外咱們還對通知中的動畫進行了優化,如今通知中的動畫能夠無縫銜接。性能
圖上的這些代碼你們沒必要刻意去記與背,咱們對於聊天方面進行的一些優化,這裏有一個 create new person 和 create image message,最主要的是 MessagingStyle 能夠表示出咱們要加入一個怎麼樣的 message,這段代碼從頭至尾寫起來既快捷又簡單。測試
以前常常有用戶向咱們反映,有些通知會忽然來不少,很煩人也不知如何去掉,因此咱們在 Android P 中會讓用戶能夠更方便的攔截通知,但這對於開發者來講並非一個特別好的消息。在此咱們提醒開發者必定記得用 channels,即 Android O 開始的 notification channels,至關於全部通知不只僅是來自於你的 App ,它可能來自於不少不一樣的方面。比方說有一個外賣 App ,它的通知內容可能包含帳單信息、配送提醒,這些都是不一樣的類別,用戶能夠自行選擇通知中顯示的內容類別,即自行選擇開啓/關掉 channels,而沒必要關掉整個 app 的全部通知。 但有一點你們要注意一下,Android P 中再也不給用戶更加靈活自由地去關閉這些 notifications,因此你們更應該去用 channels。優化
Android P 對「劉海」屏幕是原生支持的,具體的API是 WindowInserts.getDisplayCutout() 。這個API會告訴你凹口形狀、大小以及位置。目前共支持四種劉海。動畫
上圖是具體的「劉海」 API,API也是很直觀地將」劉海「位置簡化成左、右、上、下。如今已在 CameraMetadata 中加入了對外置閃光燈的支持,在照相中能提供更好地支持。3d
如今有的手機有兩個前置攝像頭,或者兩個後置攝像頭,咱們如今提供API讓你將兩個攝像頭相鏈接變成一個邏輯攝像頭。假如兩個攝像頭不在一個焦距上,你能夠將兩個攝像頭的焦距進行無縫銜接。能夠經過 Session 和 Surface 共享,沒必要從新開始,從而減低總體延遲。code
ImageDecoder 相較於之前的 BitmapFactory 性能更加,支持的地方更多。AnimatedImageDrawable 能夠直接顯示動圖。
這至關因而一個 createSource ,每個由於都是 ImageDecoder,因此能夠有 HeadProcessor 也能夠有 PostProcessor,這些能夠在解析的頭和尾進行相應的處理。具體解析詳見 Documentation。
咱們如今開始原生支持 HDR VP9 。 HEIF 是一個比 JPEG 更有效率的圖片格式,它能夠在同體積下比 JPEG 多一倍的像素。
舉個例子,在網絡阻塞的狀況下,JobScheduler 能夠很智能地暫緩上傳直到網絡暢通。
咱們在以前的1.0 版本基礎上增長了九個新運算,若是對這方面感興趣能夠多加留意。
上方是原 Kotlin 代碼和使用了 Jetpack 之後的代碼。同時也不難看出,相較於 Java,Kotlin 的代碼風格更加簡潔。
上圖的這兩個距離以往很難調整,所以咱們引入了 Baseline Distance。
以上方這段代碼距離,只靠兩行代碼就把以前使人頭疼已久的行距問題。
Magnifier 實現起來很是簡單,具體代碼以下。
在 Android P 以後,程序若是處在後臺,是沒法使用麥克風、攝像頭和感應器的。至關於給麥克風空白音,防止不良應用在後臺竊聽;攝像頭在後臺,會報錯 GeneralError 沒法鏈接。增強隱私保護是 Android P 中一個至關大的核心。
咱們在 Android P 中對電耗也進行了相應優化,最主要的兩個新功能,一個是應用後臺限制,另外一個是應用待機分組。
在 Activity Manager 中,開發者能夠找到本身的應用是否被用戶限制。
這四個分組是根據用戶的習慣,系統來決定把應用放進哪一個組。
私有 API 在Android P 中很是重要,可能會影響到各位開發者。 一些私有 API 爲實現公開SDK 文檔中未實現的功能,不少會用反射或者其餘原理來調用這些私有 API 。這些私有 API 最大的問題在於每次 Release 的時候,好比 Android N 到 Android O,或是 Android O 到 Android P,因爲它們並無在官方文檔中出現。因此對於這些私有 API ,咱們默認認爲 API 再也不在指示範圍以內,能夠任意地修改,或者這些 API 直接消失。這表明着每次用戶升級時,這些應用都會莫名其妙的崩潰,那這個對於用戶和開發者來講,都是一件很差的事情,開發者還需從新測試。 因此從 Android P 開始,咱們會逐步限制私有 API 的使用,但願你們儘快將 私有 API 轉成公有 API 。
咱們在 VM 中作了一些修改,會辨別是在調用私有 API ,若是是系統或者系統應用的話能夠放行;若是是第三方應用而非系統/系統應用,若觸發黑名單規則會直接崩潰。此外還有兩個名單,即淺灰名單和深灰名單。但願你們之後在使用淺灰名單中那些沒有可被公有 API 替換的私有 API 時,給咱們 Android 團隊以反饋。對於深灰名單,爲針對應用兼容, targetSDK 小於 Android P 系統的會提示系統警告,大於的則按黑名單處理。
但願你們能儘快進入 Target SDK 進行更新。
以上就是我今天的分享,謝謝你們!
Android P 新特性大起底 - 李寄超 | JTalk 第六期