Android P 新特性大起底 - 李寄超 | JTalk 第六期

編者按:本文系 Google 的李寄超講師,在掘金技術社區主辦的《中美技術人才硅谷大講堂 | JTalk 掘金線下活動第六期》 活動上的分享整理。掘金 JTalk 目前已舉辦6期,每期 JTalk 會邀請垂直行業的優秀工程師來分享優秀的實踐經驗,技巧方法。旨在爲開發者提供線下技術交流互動機會,幫助開發者成長。網絡

李寄超現就任於 Android 開發團隊。畢業於弗吉尼亞大學,從事 Android 系統及軟件開發多年,曾在 Google Play 、 Search 和 Payment 負責多個項目,並屢次參加展會推廣 Android 以及 Google Play 。熱衷於瞭解開發者以及推廣 Android 生態。架構

What's new in Android

咱們先來簡單回顧一下今年 I/O Keynote 都講了什麼?app

  • Android Jetpack 完美兼容 Kotlin 語言,可利用 Android KTX 大幅節省代碼量,幫助開發者加快應用開發速度。
  • Android App Bundle 在 Android Studio 中,如今能夠構建包含任何設備上應用所需一切的應用軟件包 — 支持全部語言、每種設備屏幕尺寸以及每種硬件架構。而後,當用戶下載應用時,Google Play 全新動態交付將會交付與用戶設備匹配的代碼和資源。
  • Slices 是一種 Google 平臺上適用於各類不一樣 Android 版本的界面模板,可在您的應用中顯示一組豐富的動態互動內容。
  • Actions 是 Android P 當中的新功能,能夠提供一些很細微的關於 App 內部功能的提示。
  • Android Studio 3.2 Canary 現已上線,你們有興趣的話能夠試一下,包含了 Android App Bundle
  • ML Kit

接下來,咱們說一些在本屆 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也是很直觀地將」劉海「位置簡化成左、右、上、下。

光學防抖

咱們在 Android P 的 Camera API 中加入了原生光學防抖,這個類叫做 OIS Samples 。這個原生 API 本來是隻能在 Camera 裏能用的,如今全部的開發者均可使用。它的原理是提供不少張 Samples,每個 Sample 都會有它本身的位移和時間戳。不只能夠用它作光學防抖,還能夠作其餘特效這就由開發者本身決定了。

外置閃光燈支持

如今已在 CameraMetadata 中加入了對外置閃光燈的支持,在照相中能提供更好地支持。3d

多攝像頭支持

如今有的手機有兩個前置攝像頭,或者兩個後置攝像頭,咱們如今提供API讓你將兩個攝像頭相鏈接變成一個邏輯攝像頭。假如兩個攝像頭不在一個焦距上,你能夠將兩個攝像頭的焦距進行無縫銜接。能夠經過 Session 和 Surface 共享,沒必要從新開始,從而減低總體延遲。code

新的圖像解碼器:ImageDecoder

ImageDecoder 相較於之前的 BitmapFactory 性能更加,支持的地方更多。AnimatedImageDrawable 能夠直接顯示動圖。

這至關因而一個 createSource ,每個由於都是 ImageDecoder,因此能夠有 HeadProcessor 也能夠有 PostProcessor,這些能夠在解析的頭和尾進行相應的處理。具體解析詳見 Documentation。

媒體

咱們如今開始原生支持 HDR VP9 。 HEIF 是一個比 JPEG 更有效率的圖片格式,它能夠在同體積下比 JPEG 多一倍的像素。

JobScheduler

舉個例子,在網絡阻塞的狀況下,JobScheduler 能夠很智能地暫緩上傳直到網絡暢通。

Neural Networks API 1.1

咱們在以前的1.0 版本基礎上增長了九個新運算,若是對這方面感興趣能夠多加留意。

Kotlin + Jetpack

上方是原 Kotlin 代碼和使用了 Jetpack 之後的代碼。同時也不難看出,相較於 Java,Kotlin 的代碼風格更加簡潔。

Baseline Distance

上圖的這兩個距離以往很難調整,所以咱們引入了 Baseline Distance。

以上方這段代碼距離,只靠兩行代碼就把以前使人頭疼已久的行距問題。

Magnifier 放大鏡

Magnifier 實現起來很是簡單,具體代碼以下。

增強隱私保護

在 Android P 以後,程序若是處在後臺,是沒法使用麥克風、攝像頭和感應器的。至關於給麥克風空白音,防止不良應用在後臺竊聽;攝像頭在後臺,會報錯 GeneralError 沒法鏈接。增強隱私保護是 Android P 中一個至關大的核心。

電耗優化

咱們在 Android P 中對電耗也進行了相應優化,最主要的兩個新功能,一個是應用後臺限制,另外一個是應用待機分組。

在 Activity Manager 中,開發者能夠找到本身的應用是否被用戶限制。

這四個分組是根據用戶的習慣,系統來決定把應用放進哪一個組。

私有API

私有 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 遷至26

但願你們能儘快進入 Target SDK 進行更新。

以上就是我今天的分享,謝謝你們!

《中美技術人才硅谷大講堂 | JTalk 掘金線下活動第六期》 分享整理合集

Android P 新特性大起底 - 李寄超 | JTalk 第六期

阿里巴巴黑科技調度系統揭祕 - 何劍 | JTalk 第六期

如何玩轉新技術 - 潘陽 | JTalk 第六期

相關文章
相關標籤/搜索