Android P Preview 一览

看看 Android P 预览版都有哪些令人眼前一亮的地方吧~

新特性&新API

1、Displaycutout

Android P 提供了对刘海式全面屏的支持,可以通过新添加的 Displaycutout 类来获取到刘海的位置,通过 getDisplayCutout()) 方法判断是否设备支持刘海,如果设备不支持也没有关系,可以在开发者选项中通过模拟具有凹凸口的显示屏选项来模拟任意设备上的裁剪画面。

另外,通过设置window的新属性layoutInDisplayCutoutMode来控制应用内容在凹凸口周围的展示,有以下三个值可供选择:

2、ImageDecoder

ImageDecoder 提供了更高效的方法去解码图像,它比 BitmapFactory 多出了几个优势,包括对精确缩放的支持,单步解码至硬件存储器,对解码后处理的支持,以及对动画图像的解码。如果代码中有使用 BitmapFactory 来解析图像,可以尝试使用 ImageDecoder 替换。 通过 ImageDecoder 也可以对图像实现自定义的或是复杂的效果,如圆角、圆形图片等等。

3、AnimatedImageDrawable

AnimatedImageDrawable 用来绘制和显示GIF、WebP动态图像,它的工作原理与 AnimatedVectorDrawable 类似,都是由 RenderThread 实现动画部分,因此,通过它来实现动画图片可以不用担心对UI线程造成影响。 AnimatedImageDrawable 可以通过 ImageDecoder 来解码,实例代码如下:

1
2
3
4
Drawable d = ImageDecoder.decodeDrawable(...);
if (d instanceof AnimatedImageDrawable) {
((AnimatedImageDrawable) d).start(); // Prior to start(), the first frame is displayed
}

4、ART性能提升

在Android P 上,ART对执行配置文件的使用得到了扩展,以优化应用并减少已编译应用代码的内存占用量。ART 现可使用配置文件信息在设备上重写 DEX 文件,根据官方提示的数据显示,在多个人气的应用中内存占用减少高达11%。

5、Kotlin优化

Android P 中改进了一些编译器优化,尤其是那些针对循环的编译器优化,性能得到了提升。

6、安全&隐私

从此次 Android P 预览版可以看出,谷歌官方对于安全和隐私越来越注重,例如在 Android P 上限制所有处于空闲状态的应用对话筒、摄像头和所有 SensorManager 传感器的访问。当一个应用的 UID 空闲时,麦克风将会报告系统 “无音频信号”,传感器将会停止报告事件。

7、神经网络 API 1.1

神经网络 API 是在 Android 8.1 推出,它设计用于在移动设备上运行机器学习的计算密集型操作,为构建和训练神经网络的高级机器学习框架(如 TensorFlow LiteCaffe2)提供基础层功能。API 1.1 在之前的基础上新增加了9个操作,分别是:Pad, BatchToSpaceND, SpaceToBatchND, Transpose, Strided Slice, Mean, Div, Sub, 和 Squeeze

神经网络是指模仿生物神经系统结构和功能的一种数学模型,其最主要的用途就是分类,在我们的身边处处可见它的影子,如各种搜索引擎、各种新闻类应用的个性化推荐等等。

TensorFlow 是Google开发的一款神经网络的Python外部的结构包, 也是一个采用数据流图来进行数值计算的开源软件库。TensorFlow 让我们可以先绘制计算结构图,,也可以称是一系列可人机交互的计算操作, 然后把编辑好的Python文件转换成更高效的C++,并在后端进行计算。它运行在 CPU或是GPU上,因此有很好的可移植性。

TensorFlow Lite 是针对移动端和嵌入式设备的轻量级解决方案,它具有轻量级、跨平台和快速的特性,支持 Android 神经网络 API 来进行硬件加速,当设备硬件加速不可用时会返回至 CPU 执行。

行为变化

1、移除测试库

在 Android 8.1之前,Android framework 提供了一些测试类,比如 ActivityInstrumentationTestCase2 ,从 Android P 开始,测试库从framework中移除,当然它们依旧是可以使用的,你可以选择去对它进行依赖。

2、FLAG_ACTIVITY_NEW_TASK

在 Android P 上,不可以在没有 context 的情况下启动一个Activity,除非是通过
FLAG_ACTIVITY_NEW_TASK 标志,如果试图在没有该标志的情况下去启动新的Activity,那么这个Activity将不会被启动,同时系统会打印一条Log。

3、前台服务

如果应用当前SDK版本为 P 或是更高,那么使用前台服务就必须需要 FOREGROUND_SERVICE 权限,这个权限是 normal persission,因此系统会自动为应用获取。如果尝试在没有该权限的情况下去创建前台服务,则会抛出 SecurityException 异常。

4、新的签名方式

Android P 增加了对 APK Signature Scheme v3 的支持, 该方案可以选择在每个签名证书的签名块中包含一个旋转证明记录。此功能可以让应用使用新的签名证书进行签名,通过将APK的过去签名证书与现在签名的证书相关联。

5、序列号获取限制

在 Android 8.0 上,Build.SERIAL 被标记为弃用,在 P 上,为了更好保护用户隐私,Build.SERIAL 返回 UNKNOWN ,如果应用需要序列号,需要 READ_PHONE_STATE 权限,然后调用 getSerial() 方法。

6、旋转锁定

在 Android O 上用户可以通过点击快捷设置中来打开或关闭自动旋转,而在 Android P 上为了消除一些不经意的旋转动作,提供了一个锁定当前方向的功能,当用户关闭自动旋转后,在方向发生变化时,底部导航栏会出现一个新添加的旋转按钮,用户可以手动点击去触发应用当前 Activity 旋转。用户在锁定模式下,可以将当前可见的 Activity 设置为任意的旋转角度。如果一个应用在自动旋转模式下支持多种旋转,那么它也应当在锁定模式下去支持这些旋转。Activity 设置了特殊的方向,如 screenOrientation=landscape,那么会忽略锁定模式,表现与 O 上相同。

相关链接

Android P Features and APIs

Android P Behavior Changes

Android P 开发者预览版首发

机器学习系列 | 莫烦Python

Google正式发布TensorFlow Lite预览版,针对移动/嵌入设备的轻量级解决方案