阅读 1763

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 都讲了什么?

  • 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 的功能

通知

首先是通知,我们在 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 中加入了对外置闪光灯的支持,在照相中能提供更好地支持。

多摄像头支持

现在有的手机有两个前置摄像头,或者两个后置摄像头,我们现在提供API让你将两个摄像头相连接变成一个逻辑摄像头。假如两个摄像头不在一个焦距上,你可以将两个摄像头的焦距进行无缝衔接。可以通过 Session 和 Surface 共享,不必重新开始,从而减低整体延迟。

新的图像解码器: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 第六期

关注下面的标签,发现更多相似文章
评论