Android那些事儿Android技术知识Android开发

Android O 行为变更(一)

2017-08-02  本文已影响233人  Android那些事儿

文章摘要
1、后台执行限制
2、Android 后台位置限制
3、应用快捷键
4、语言区域和国际化
5、提醒窗口
6、输入和导航
7、网页表单自动填充
8、无障碍功能
9、网络连接和 HTTP(S) 连接
10、蓝牙
11、无缝连接
12、安全性
13、隐私性
14、记录未捕获的异常
15、联系人提供程序使用情况统计方法的变更
16、集合的处理
17、Android 企业版


英文文献

Android O 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更。本文重点介绍您应该了解并在开发应用时加以考虑的一些主要变更。

其中大部分变更会影响所有应用,而不论应用针对的是何种版本的 Android。不过,有几项变更仅影响针对 Android O 的应用。为清楚起见,本页面分为两个部分:针对所有 API 级别的应用针对 Android O 的应用

一、针对所有 API 级别的应用

这些行为变更适用于 在 Android O 平台上运行的 所有应用,无论这些应用是针对哪个 API 级别构建。所有开发者都应查看这些变更,并修改其应用以正确支持这些变更(如果适用)。

1.1、后台执行限制

Android O 为提高电池续航时间而引入的变更之一是,当您的应用进入已缓存状态时,如果没有活动的组件,系统将解除应用具有的所有唤醒锁。
此外,为提高设备性能,系统会限制未在前台运行的应用的某些行为。具体而言:

默认情况下,这些限制仅适用于针对 O 的应用。不过,用户可以从 Settings --> Display 为任意应用启用这些限制,即使应用并不是以 O 为目标平台。

Android O 还对特定函数做出了以下变更:

1.2、Android 后台位置限制

为节约电池电量、保持良好的用户体验和确保系统健康运行,在运行 Android O 的设备上使用后台应用时,降低了后台应用接收位置更新的频率。此行为变更会影响包括 Google Play 服务在内的所有接收位置更新的应用。

此类变更会影响以下 API:

为确保您的应用按预期方式运行,请完成以下步骤:

1.3、应用快捷键

Android O 对应用快捷方式做出了以下变更:

1.4、语言区域和国际化

Android 7.0(API 级别 24)引入能指定默认类别语言区域的概念,但是某些 API 在本应使用默认 DISPLAY 类别语言区域时,仍然使用不带参数的通用 Locale.getDefault() 函数。现在,在 Android O 中,以下函数使用 Locale.getDefault(Category.DISPLAY) 来代替:

当为 Locale 参数指定的 displayScript 值不可用时,Locale.getDisplayScript(Locale) 同样回退到 Locale.getDefault()。

与语言区域和国际化有关的其他变更如下:

1.5、提醒窗口

如果应用使用 SYSTEM_ALERT_WINDOW 权限并且尝试使用以下窗口类型之一来在其他应用和系统窗口上方显示提醒窗口:

...那么,这些窗口将始终显示在使用 TYPE_APPLICATION_OVERLAY 窗口类型的窗口下方。如果应用针对的是 Android O,则应用会使用 TYPE_APPLICATION_OVERLAY 窗口类型来显示提醒窗口。

1.6、输入和导航

随着 Android 应用出现在 Chrome 操作系统和平板电脑等其他大尺寸设备上,我们看到,用户在 Android 应用中又重新开始使用键盘导航。在 Android O 中,我们又再次使用键盘作为导航输入设备,从而为基于箭头键和 Tab 键的导航构建了一种更可靠并且可预测的模型。

尤其要指出的是,我们对元素焦点行为做出以下变更:

另外,Android O 中的所有工具栏元素自动组成键盘导航键区,用户可以更加轻松地导航进入和离开每个作为一个整体的工具栏。

1.7、网页表单自动填充

现在,Android 自动填充框架提供对自动填充功能的内置支持,对于安装到运行 Android O 的设备上的应用,与 WebView 对象相关的下列函数已经发生变化:

WebSettings

WebViewDatabase

1.8、无障碍功能

现在,无障碍服务可识别应用的 TextView 对象内部的所有 ClickableSpan 实例。

1.9、网络连接和 HTTP(S) 连接

Android O 对网络连接和 HTTP(S) 连接行为做出了以下变更:

1.10、蓝牙

Android O 对 ScanRecord.getBytes() 函数检索的数据长度做出以下变更:

1.11、无缝连接

Android O 对 WLAN 设置进行了多项改进,这样可以更轻松地选择能够提供最佳用户体验的 WLAN 网络。具体变更包括:

1.12、安全性

Android O 包含以下与安全性有关的变更:

1.13、隐私性

Android O 对平台做出了以下与隐私性有关的变更。

1.14、记录未捕获的异常

如果某个应用安装的 Thread.UncaughtExceptionHandler 未移交给默认的 Thread.UncaughtExceptionHandler,则当出现未捕获的异常时,系统不会终止应用。从 Android O 开始,在此情况下系统将记录异常堆栈跟踪情况;在之前的平台版本中,系统不会记录异常堆栈跟踪情况。

我们建议,自定义 Thread.UncaughtExceptionHandler 实现始终移交给默认处理程序处理;遵循此建议的应用不受 Android O 此项变更的影响。

1.15、联系人提供程序使用情况统计方法的变更

在之前版本的Android中,联系人提供程序组件允许开发者获取每个联系人的使用情况数据。此使用情况数据揭示了与某个联系人相关联的每个电子邮件地址和每个电话号码的信息,包括与该联系人联系的次数以及上次联系该联系人的时间。请求 READ_CONTACTS 权限的应用可以读取此数据。

如果应用请求 READ_CONTACTS 权限,它们仍可以读取此数据。从 Android O 开始,使用情况数据查询会返回近似值,而不是精确值。不过,Android 系统内部仍然会保留精确值,因此,此变更不会影响 auto-complete API。

此行为变更会影响以下查询参数:

1.16、集合的处理

现在,AbstractCollection.removeAll() 和 AbstractCollection.retainAll() 始终引发 NullPointerException;之前,当集合为空时不会引发 NullPointerException。此项变更使行为符合文档要求。

1.17、Android 企业版

Android O 更改了企业应用(包括设备规范控制器 (DPC))的某些 API 和功能的行为。这些变更包括:

上一篇 下一篇

猜你喜欢

热点阅读