编者按:本文系 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会告诉你凹口形状、大小以及位置。目前共支持四种刘海。动画
如今已在 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 第六期