[Android各版本特性]Android 10

六眼飞鱼酱① 提交于 2019-12-16 03:58:00

1.创新技术和新体验

1.可折叠设备

Android 10 基于强大的多窗口支持构建而成,扩展了跨应用窗口的多任务处理能力,还提供了屏幕连续性,可以在设备折叠或展开时维持应用状态。Android 10 在 onResume 和 onPause 中添加了多项改进,用于支持多项恢复,并在应用获得焦点时通知应用。它还更改了 resizeableActivity 清单属性的工作方式,以帮助您管理应用在可折叠设备和大屏幕设备上的显示方式。为帮助针对可折叠设备进行编译,您可以在 Android Studio 中配置可折叠模拟器来用作虚拟设备 (AVD)。

2.5G 网络

5G 有望在稳定提升速度的同时降低延迟,Android 10 新增了针对 5G 的平台支持,并扩展了现有 API 来帮助您充分利用这些增强功能。您可以使用连接 API 来检测设备是否具有高带宽连接,还可以检查连接是否按流量计费。借助这些功能,您的应用和游戏可以为使用 5G 的用户量身打造丰富的沉浸式体验。

3.通知中的智能回复

Android 10 使用设备上的机器学习在通知中提供上下文操作建议,如智能回复消息或在通知中打开某个地址的地图。您的应用可以立即充分利用此功能,而您无需执行任何操作。系统提供的智能回复和操作默认直接插入到通知中。您仍可以根据需要自行提供回复或操作。使用 setAllowGeneratedReplies() 和 setAllowSystemGeneratedContextualActions() 即可针对每则通知选择停用智能回复。

4.深色主题

Android 10 新增了一个系统级的深色主题,非常适合光线较暗的场景并能帮助节省电量。您可以为应用构建自定义深色主题,也可以选择使用新的 Force Dark 功能,让系统根据现有主题动态创建深色版本。

5.手势导航

Android 10 引入了全手势导航模式,该模式不显示通知栏区域,允许应用使用全屏来提供更丰富、更让人沉浸的体验。要实现这一点,应用应使用 setSystemUiVisibility() API 以全屏模式布局,然后相应地处理 WindowInsets,以确保重要的界面区域未被遮挡。

从 Android 10 开始,用户可以在设备中启用手势导航。用户启用后,手势导航会影响设备上的所有应用,无论应用是否以 API 级别 29 为目标平台。例如,如果用户从屏幕边缘向内滑动,系统会将该手势解读为“返回”导航,除非应用针对屏幕的相应部分明确替换该手势。

为了确保您的应用与手势导航兼容,您需要将应用内容扩展到屏幕边缘,并适当地处理存在冲突的手势。

6.设置面板

现在,您可以通过新的设置面板 API 在应用上下文中直接显示关键系统设置。设置面板是浮动界面,您可以通过调用它来显示用户可能需要使用的设置,如互联网连接、NFC 和音量。例如,浏览器可以显示具有飞行模式、WLAN(包括附近网络)和移动数据等连接设置的面板。要显示设置面板,只需发出具有某个新 Settings.Panel 操作的 intent。

7.共享快捷方式

共享快捷方式功能可使共享更加轻松快捷,让用户能够直接跳转到其他应用来共享内容。开发者可以发布能在应用中启动特定 Activity 的共享目标,同时附上内容;这些共享目标会在共享界面中向用户显示。因为共享目标是提前发布的,所以共享界面会在启动后立即加载它们。共享快捷方式类似于应用快捷方式,都使用同一个 ShortcutInfo API。ShareTarget AndroidX 库也支持此 API。

2.用户隐私设置

1.赋予用户对位置数据的更多控制权

用户可以通过新的权限选项更好地控制他们的位置数据;现在,他们可以允许应用仅在实际使用(在前台运行)时访问位置信息。对于大部分应用来说,这提供了足够的访问级别;而对于用户来说,这在确保透明度和控制权方面是一项重大改进。

2.在扫描网络时保护位置数据

用于扫描网络的大多数 API 都需要粗略位置权限。Android 10 改为要求精确位置权限ACCESS_FINE_LOCATION 才能使用 WLAN、WLAN 感知或蓝牙 API 中的一些方法,由此来增强对这些 API 的防御。

3.阻止设备跟踪

应用无法再访问不可重置的设备标识符(可用于跟踪),包括设备 IMEI、序列号和类似标识符。设备的 MAC 地址也会默认在连接到 WLAN 网络时随机分配。请阅读最佳做法,其中的内容有助于您为具体使用场景选择合适的标识符;

4.保护外部存储设备中的用户数据

Android 10 引入了一些变更,目的是让用户更好地控制外部存储设备中的文件以及其中的应用数据。应用可以将自己的文件存储在专用沙盒中,但必须使用 MediaStore 来访问共享媒体文件,并使用系统文件选择器访问新的“下载内容”集合中的共享文件。

5.屏蔽意外中断

Android 10 可阻止应用从后台启动,从后台启动会使应用意外跳转到前台并从其他应用获得焦点。

6.在后台运行时访问设备位置信息需要权限

为了让用户更好地控制应用对位置信息的访问权限,Android 10 引入了 ACCESS_BACKGROUND_LOCATION 权限。

与 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION 权限不同,ACCESS_BACKGROUND_LOCATION 权限仅会影响应用在后台运行时对位置信息的访问权限。

7.对 /proc/net 文件系统的访问权限实施了限制

在搭载 Android 10 或更高版本的设备上,应用无法访问 /proc/net,其中包含与设备的网络状态相关的信息。需要访问这些信息的应用(如 VPN)应使用 NetworkStatsManager 或 ConnectivityManager 类。

8.对启用和停用 WLAN 实施了限制

以 Android 10 或更高版本为目标平台的应用无法启用或停用 WLAN。WifiManager.setWifiEnabled() 方法始终返回 false。

如果您需要提示用户启用或停用 WLAN,请使用设置面板

9.限制对屏幕内容的访问

为了保护用户的屏幕内容,Android 10 更改了 READ_FRAME_BUFFER、CAPTURE_VIDEO_OUTPUT 和 CAPTURE_SECURE_VIDEO_OUTPUT 权限的作用域,从而禁止以静默方式访问设备的屏幕内容。从 Android 10 开始,这些权限只能通过签名访问。

需要访问设备屏幕内容的应用应使用 MediaProjection API,此 API 会显示提示,要求用户同意访问。

10.面向用户的权限检查(针对旧版应用)

如果您的应用以 Android 5.1(API 级别 22)或更低版本为目标平台,则用户首次在搭载 Android 10 或更高版本的平台上使用您的应用时,系统会向其显示权限屏幕。此屏幕让用户有机会撤消系统先前在安装时向应用授予的访问权限。

3.安全性

1.存储加密

搭载 Android 10 的所有兼容设备都必须加密用户数据;为了提高加密效率,Android 10 引入了我们的新加密模式 Adiantum。

2.默认启用 TLS 1.3

Android 10 还默认启用 TLS 1.3,它是 TLS 标准的主要修订版本,具有性能优势和更高的安全性。

  • TLS 1.3 加密套件不可自定义。在启用 TLS 1.3 后,受支持的 TLS 1.3 加密套件会始终保持启用状态。任何尝试通过调用 setEnabledCipherSuites() 停用该加密套件的操作均会被忽略。
  • 在协商 TLS 1.3 时,系统会在将会话添加到会话缓存之前调用 HandshakeCompletedListener 对象。(在 TLS 1.2 和之前的其他版本中,系统会在将会话添加到会话缓存之后调用这些对象。)
  • 在某些情况下,SSLEngine 实例会在之前的 Android 版本中抛出 SSLHandshakeException,而这些实例在 Android 10 及更高版本中会改为抛出 SSLProtocolException。
  • 不支持 0-RTT 模式。

如有需要,您可以通过调用 SSLContext.getInstance(“TLSv1.2”) 来获取已停用 TLS 1.3 的 SSLContext。您还可以对相关对象调用 setEnabledProtocols(),从而为每个连接启用或停用协议版本。

3.TLS 不信任使用 SHA-1 签名的证书

在 Android 10 中,使用 SHA-1 哈希算法的证书在 TLS 连接中不受信任。自 2016 年以来,根 CA 未再颁发过此类证书,因为它们不再受 Chrome 或其他主流浏览器的信任。

如果某网站使用的是 SHA-1 证书,则任何尝试连接该网站的操作都将失败。

4.连接性

1.改进了点对点连接和互联网连接

我们重构了 WLAN 堆栈,目的是改进隐私设置和性能,同时改进常见使用场景(如管理 IoT 设备以及提供互联网连接建议),而无需请求位置权限。网络连接 API 针对点对点功能(如配置、下载或打印)简化了通过本地 WLAN 管理 IoT 设备的操作。网络建议 API 可让应用向用户显示首选 WLAN 网络以进行互联网连接。

2.WLAN 性能模式

应用现在可以通过启用高性能和低延迟模式来请求自适应 WLAN。如果低延迟对用户体验(如实时游戏、活跃语音通话以及类似使用场景)至关重要,这些模式会极具优势。平台与设备固件配合使用,可以满足最低耗电量的要求。要使用新的性能模式,请调用 WifiManager.WifiLock.createWifiLock()(使用 WIFI_MODE_FULL_LOW_LATENCY 或 WIFI_MODE_FULL_HIGH_PERF)。在这些模式中,平台与设备固件配合使用,可以满足最低耗电量的要求。

5.Android 基础知识

1.ART 优化

在 ART 运行时方面的改进可帮助您的应用更快地启动、占用更少的内存并更顺畅地运行,而您无需执行任何操作。借助 Google Play 提供的 ART 配置文件,ART 在应用运行之前就可以预先编译应用组件。在运行时,Android 10 向 ART 的并发复制 (CC) 垃圾回收器添加了分代垃圾回收功能,以节省垃圾回收的时间并提高 CPU 效率,减少卡顿,同时帮助应用在低端设备上更顺畅地运行。

2.Thermal API

当设备过热时,它们可能会限制 CPU 和/或 GPU,而这可能会以意想不到的方式影响应用和游戏。现在,在 Android 10 中,应用和游戏可以使用 Thermal API 监控设备变化情况,并在设备过热时采取措施,使设备恢复到正常温度。例如,影音在线播放应用可以降低分辨率/比特率或减少网络流量;相机应用可以停用闪光灯或密集型图像增强;游戏可以降低帧速率或减少多边形曲面细分。

*6.其他要注意的点

1.android.preference 库已弃用

从 Android 10 开始,将弃用 android.preference 库。开发者应该改为使用 AndroidX preference 库,这是 Android Jetpack 的一部分。

2.Android Beam 已弃用

在 Android 10 中,我们正式弃用了 Android Beam,这是一项旧版功能,可通过近距离无线通信 (NFC) 在多个设备之间启动数据共享。我们还弃用了一些相关的 NFC API。Android Beam 仍可供需要的设备制造商合作伙伴使用,但它已不再处于积极的开发阶段。不过,Android 仍将继续支持其他的 NFC 功能和 API,并且从标签和付款中读取数据等使用场景仍将继续按预期执行。

3.有关限制非 SDK 接口的更新

为了帮助确保应用的稳定性和兼容性,Android 平台开始限制应用在 Android 9(API 级别 28)中使用非 SDK 接口。Android 10 包含更新后的受限制非 SDK 接口列表(基于与 Android 开发者之间的协作以及最新的内部测试)。我们的目标是在限制使用非 SDK 接口之前确保有可用的公开替代方案。详细信息请看 Android 10 中有关限制非 SDK 接口的更新

4.共享内存

Ashmem 更改了 /proc//maps 中的 dalvik 映射的格式,这会影响那些直接解析映射文件的应用。如果应用依赖于 dalvik 映射格式,则应用开发者应该在搭载 Android 10 或更高版本的设备上测试 /proc//maps 格式并相应地进行解析。

以 Android 10 为目标平台的应用无法直接使用 ashmem (/dev/ashmem),而必须通过 NDK 的 ASharedMemory 类访问共享内存。此外,应用无法直接对现有 ashmem 文件描述符进行 IOCTL,而必须改为使用 NDK 的 ASharedMemory 类或 Android Java API 创建共享内存区域。这项变更可以提高使用共享内存时的安全性和稳健性,从而提高 Android 的整体性能和安全性。

5.支持可折叠设备

Android 10 包含支持可折叠设备和大屏设备的变更。

当应用在 Android 10 上运行时,onResume() 和 onPause() 方法的工作原理是不同的。当多个应用同时在多窗口模式或多显示屏模式下显示时,可见堆栈中所有可设置为焦点的顶层 Activity 都处于“已恢复”状态,但实际上焦点仅位于其中一个 Activity 上,即“在最顶层处于已恢复状态”的 Activity。在 Android 10 之前的版本中运行时,一次只能恢复系统中的一个 Activity,而所有其他可见 Activity 都处于已暂停状态。

请不要将“焦点位于”的 Activity 与“在最顶层处于已恢复状态”的 Activity 混淆。系统会根据 Z-Order 来为 Activity 分配优先级,以便为用户最后进行互动的 Activity 提供更高的优先级。Activity 可能在顶层处于已恢复状态,但焦点却并不位于其上(例如,如果通知栏展开)。

在 Android 10(API 级别 29)及更高版本中,您可以订阅 onTopResumedActivityChanged() 回调,以便在 Activity 获取或失去在最顶层处于已恢复状态的位置后收到通知。这相当于 Android 10 之前版本中的已恢复状态;如果您的应用使用的专用或单一资源可能需要与其他应用共享,这可以作为有用的提示。

resizeableActivity 清单属性的行为也发生了变化。如果某个应用在 Android 10(API 级别 29)或更高版本中设置 resizeableActivity=false,则当可用屏幕尺寸发生变化或者该应用从一个屏幕移到另一屏幕时,它可能处于兼容模式下。

应用可使用 Android 10 中引入的 android:minAspectRatio 属性来指示您的应用支持的屏幕宽高比。

从版本 3.5 开始,Android Studio 的模拟器工具将包含 7.3" 和 8" 的虚拟设备,以便您使用较大屏幕测试代码。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!