译者注:
Android 7.0 Nougat为用户和开发人员介绍了各种新功能和功能。本文档重点介绍了开发人员的新功能。
请务必查看 行为更改,了解平台更改可能会对您的应用产生哪些影响。
要详细了解Android 7.0的用户功能,请访问 。
在Android 7.0中,我们在平台中引入了一个新的和非常需要的多任务功能 - 多窗口支持。
用户现在可以一次在屏幕上弹出打开两个应用程序。
更多相关详细信息,请参阅 开发人员文档。
图1.以分屏模式运行的应用程序。
在Android 7.0中,我们重新设计了通知,使其更容易,更快速地使用。一些更改包括:
我们正在更新通知模板,以强调英雄(原:hero)图片和头像。开发人员将能够利用新模板,在代码中进行最少调整用以实现。
您可以使用MessagingStyle类自定义更多与您的通知相关联的用户界面标签 。您可以配置消息,对话标题和内容视图。
系统可以将通知消息分组在一起,例如通过消息主题,并且在组内显示。用户可以对其执行操作,例如“关闭”或“存档”。
如果您已经掌握Android Wear通知方式,那么您已经熟悉此模型。
对于实时通讯应用,Android系统支持内联回复,用户能当以短信或者文字消息的方式来直接回复通知的消息。
当在通知中使用自定义视图时,两个新的API可让您利用系统装饰(原:leverage system decorations),例如通知标题和操作。
在Android 7.0中,我们添加了一个JIT(即时)编译器,其中包含针对ART的代码分析,这使得它能够在运行时不断提高Android应用的性能。
JIT编译器辅助ART的即时Ahead of Time (AOT)编译器,有助于提高运行时性能,节省存储空间,加快应用程序更新和系统更新速度。
配置引导编译(原:Profile-guided compilation)允许ART根据每个应用的实际使用情况以及设备上的条件来管理每个应用的AOT / JIT编译。
例如,ART维护每个应用程序的热方法(原:hot method)的配置引导文件,并可以预编译和缓存这些方法以获得最佳性能。
它不会编译其他部分,直到它们实际使用才会编译。
除了提高应用程序关键部分的性能,配置文件引导编译(原:profile-guided compilation)有助于减少应用程序的总体RAM占用空间,
包括相关联的二进制文件。此功能在低内存设备上尤其重要。
ART以最小化对设备电池的影响的方式来管理配置引导编译。它仅在设备空闲和充电时才进行预编译,从而通过提前完成此项工作来节省时间和电量。
ART的JIT编译器的最显着的优点之一是应用安装和系统更新的速度。
甚至是在Android 6.0中,需要几分钟来优化和安装的大型应用程序现在可以在几秒钟内安装。
系统更新也更快,因为没有更多的优化步骤。
Android 6.0介绍了Doze,这是一种系统模式,通过延迟应用程序的CPU和网络活动来节省电池,当设备空闲时,例如当它躺在桌子或抽屉里。
现在在Android 7.0中,Doze进一步,在运行中节省电池。
任何时候屏幕关闭一段时间,并且设备已拔出,Doze会将限制应用CPU和网络(原:Doze applies a subset of the familiar CPU and network restrictions to apps.)。
这意味着用户即使在口袋中携带设备也可以节省电池。
(译者注:在Android 6.0的时候Doze会通过传感器和定位来判断手机是否在运动状态,静止才可能会触发Doze。
而现在Android 7.0通过优化可以满足手机在运动的情况下也可以触发Doze达到省电)
图3. Doze现在应用限制以提高电池寿命,即使设备不稳定。
在设备处于电池状态时屏幕关闭后很短时间,Doze限制网络访问并延迟作业和同步。
在短暂的维护窗口期间,允许应用程序进行网络访问,并执行任何延迟作业/同步。打开屏幕或插入设备会使设备脱离Doze。
当设备再次静止时,在使用电池情况下屏幕关闭,Doze会全面限制,警报和WIFI扫描的CPU和网络。
无论设备是否移动,适用于Doze的应用程序的最佳做法是相同的,因此如果您已经更新了应用程序以优雅地处理Doze,那么您就已经设置好了。
如果没有,请立即开始使您的应用程序适应Doze。
项目Svelte是一个持续努力,最大限度地减少系统和应用程序在生态系统中的Android设备的RAM使用。
在Android 7.0中,Svelte项目专注于优化应用程序在后台运行的方式。
后台处理是大多数应用程序的重要组成部分。当处理正确,它可以使您的用户体验令人惊叹-即时,迅速,自动化(原:context-aware)。
当不正确处理时,后台处理可能不必要地消耗RAM(和电池),并影响其他应用程序的系统性能。
自从Android 5.0以来, 一直是以一种对用户有利的方式执行后台工作的首选方式。
应用程序可以调度作业,同时根据内存,电源和连接条件优化系统。JobScheduler提供了控制和便捷,我们希望所有的应用程序使用它。
另一个好的选择是,它是Google Play服务的一部分,它提供类似的作业调度功能,可与旧版Android兼容。
我们将继续扩展JobScheduler并 GCMNetworkManager满足更多您的使用案例 - 例如,在Android 7.0中,您现在可以根据内容提供商的更改安排后台工作。
同时,我们开始弃用一些可能降低系统性能的旧模式,特别是在低内存设备上。
在Android 7.0中,我们删除了三个常用的隐式广播 - ,和,
因为那些可以一次唤醒多个应用程序的后台进程,并消耗内存和电池。如果您的应用程式收到这些资料,请改用Android 7.0迁移至JobScheduler相关API。
更多详情请见 文档
Android 7.0在类中提供了同步移动,在某些情况下,它提供比更好的电池性能:当渲染视频或3D内容时,使用滚动和动画视频位置的应用程序,使用SurfaceView比使用TextureView更少的力气。
SurfaceView类在屏幕上实现了更多的电池效率合成,因为它被合成在专用硬件中,与应用程序窗口内容分开。 因此,它比TextureView的中间副本少。
SurfaceView对象的内容位置现在与包含应用程序内容同步更新。 这种变化的一个结果是,在SurfaceView中播放的视频的简单转换或缩放不再随着视图移动而在视图旁产生黑色条。
从Android 7.0开始,我们强烈建议您通过使用SurfaceView而不是TextureView来节省功耗。
在移动设备的寿命期间,蜂窝数据计划的成本通常超过设备本身的成本。对于许多用户,蜂窝数据是他们想要节省的昂贵资源。
Android 7.0引入了Data Saver模式,这是一种新的系统服务,可帮助减少应用程序(无论是漫游,接近结算周期结束还是小型预付费数据包)使用移动数据网络。
Data Saver可以让用户控制应用程序如何使用移动数据网络,并让开发者在启用“数据节省程序”时提供更有效的服务。
当用户在“设置”中启用“数据节省程序”并且设备位于计量网络上时,系统会阻止后台数据使用情况,并通知应用程序尽可能在前台使用较少的数据,例如限制流式传输的比特率,降低图像质量,延迟乐观预缓存等。
用户可以将特定应用加入白名单,以便在打开“流量节省程序”时允许后台计量的数据流量。
Android 7.0扩展了为应用程序提供了一种和的方法。所有应用程序应检查用户是否已启用数据节省程序,并努力限制前台和后台数据使用情况。
Android 7.0将 (一种新的3D渲染API)集成到平台中。像 一样,Vulkan是由Khronos集团维护的3D图形和渲染的开放标准。
Vulkan是从头开始设计的,以最大限度地减少驱动程序中的CPU开销,并允许您的应用程序更直接地控制GPU操作。Vulkan还通过允许多个线程一次执行诸如命令缓冲器构造的工作来实现更好的并行化。
Vulkan开发工具和库已经推出到Android 7.0DK。他们包括:
Vulkan仅适用于配备有Vulkan功能的硬件(例如Nexus 5X,Nexus 6P和Nexus Player)的设备上的应用。我们正在与合作伙伴紧密合作,尽快将Vulkan推向更多设备。
有关详细信息,请参阅。
快速设置是一种流行和简单的方法,直接从通知窗口中显示关键设置和操作。在Android 7.0中,我们扩大了快速设置的范围,使其更加实用和方便。
我们为其他快速设置图块添加了更多空间,用户可以通过向左或向右滑动来访问分页显示区域。我们还让用户控制快速设置图块的显示方式以及显示的位置 - 用户只需通过拖放即可添加或移动图块。
对于开发人员,Android 7.0还添加了一个新的API,可让您定义自己的快速设置图块,以便用户轻松访问应用中的主要控件和操作。
快速设置图块保留用于紧急需要或经常使用的控件或操作,不应用作启动应用程序的快捷方式。
定义图块后,您可以将其展示给用户,他们可以通过拖放将其添加到“快速设置”中。
有关创建应用程序图块的信息,请参阅参考文档。
Android 7.0 现在支持在平台中进行号码屏蔽,提供框架 API,让服务提供商可以维护屏蔽的号码列表。
默认短信应用、默认手机应用和运营商应用可以对屏蔽的号码列表进行读取和写入操作。其他应用则无法访问此列表。
通过使号码屏蔽成为平台的标准功能,Android 为应用提供一致的方式来支持广泛的设备上的号码屏蔽。应用可以利用的其他优势包括:
此外,通过 Android 的运营商应用集成表示运营商可以读取设备上屏蔽的号码列表,并为用户执行服务端屏蔽,以阻止不需要的来电和短信通过任何介质(如 VOIP 端点或转接电话)到达用户。
有关详细信息,请参阅参考文档 。
Android 7.0允许默认手机应用程序屏幕来电。手机应用程序通过实现新的CallScreeningService,这允许手机应用程序执行基于来电的一些操作,例如:
有关详细信息,请参阅参考文档 。
Android 7.0现在允许用户在“设置”中选择多个地区,以便更好地支持双语用例。
应用程序可以使用新的API获取用户所选的区域设置,然后为多地区用户提供更复杂的用户体验,
例如显示多种语言的搜索结果,而不提供以用户已知的语言翻译网页。
除了多语言环境支持之外,Android 7.0还扩展了用户可用的语言范围。它提供超过25种变体,每种用于常用的语言,如英语,西班牙语,法语和阿拉伯语。它还增加了对100多种新语言的部分支持。
应用程序可以通过调用获取用户设置的区域设置列表 LocaleList.GetDefault()。为了支持更多的区域设置,Android 7.0正在改变它解决资源的方式。请确保您测试并验证您的应用程序按照预期使用新的资源解析逻辑。
要了解新的资源解析行为和您应遵循的最佳做法,请参阅。
Android 7.0引入了额外的emojis和表情符号相关的功能,包括肤色表情和支持变化选择器。如果您的应用程式支持emojis,请按照下列指南来使用这些表情符号相关功能。
要检查系统字体中存在哪些emojis,请使用[hasGlyph(String)}()方法。
变化选择器允许您以彩色或黑白显示某些表情符号。在移动设备上,应用应以彩色而不是黑白表示emojis。
但是,如果您的应用在文本中显示emojis,则应使用黑白变体。要确定表情符号是否有变化,请使用变化选择器。
有关包含变体的字符的完整列表,请查看 中关于变体的 表情符号变体序列部分 。
Android 7.0允许用户根据自己的喜好修改emojis的渲染肤色。
键盘应用程序应该为具有多种肤色的表情符号提供可视指示,并应允许用户选择他们喜欢的肤色。
要确定哪个系统表情符号有肤色调整,请使用该 方法。
您可以通过阅读 来确定哪些emojis使用肤色 。
Android 7.0现在在Android框架中的包下提供了一 API 的子集android.icu。
迁移很容易,并且大多数情况下只需要从com.java.icu命名空间更改为 android.icu。
如果您已在应用中使用ICU4J绑定,则切换到android.icuAndroid框架中提供的API可以大幅节省APK大小。
要了解有关Android ICU4J API的更多信息,请参阅 。
从Android 7.0及更高版本的Chrome 51版本开始,您设备上的Chrome APK用于提供和渲染Android系统WebViews。
这种方法可以提高设备本身的内存使用,还可以减少保持WebView更新所需的带宽(因为只要Chrome保持启用状态,独立的WebView APK将不再更新)。
您可以选择通过使开发人员选项,然后选择您的WebView提供商的WebView实现。您可以使用安装在设备或独立Webview APK上的任何兼容的Chrome版本(开发,测试或稳定)作为WebView实现。
从Android 7.0中的Chrome版本51开始,当启用开发人员选项“Multiprocess WebView”时,WebView将在单独的沙箱进程中运行Web内容。
在未来的Android版本中启用多处理WebView之前,我们正在寻找有关兼容性和运行时性能的反馈。在此版本中,预计在启动时间,总内存使用和软件渲染性能方面的回归。
如果你在多进程模式下发现意外的问题,我们想了解问题。请与上的WebView小组联系。
从以Android 7.0为目标的应用开始,当加载新网页时,Javascript上下文将被重置。目前,对于在新的WebView实例中加载的第一页,上下文被继承。
想要在WebView中插入Javascript的开发人员应该在页面开始加载后执行脚本。
从以Android 7.0为目标的应用开始,地理位置API将只允许在安全来源(通过HTTPS)。此政策旨在保护用户在使用不安全连接时的私人信息。
WebView定期更新,因此我们建议您经常使用WebView的测试版频道测试与您的应用程序的兼容性。
要开始在Android 7.0上测试WebView的预发布版本,请下载并安装Chrome开发者版或Chrome测试版,然后选择它作为开发人员选项下的WebView实施,如上所述。
请通过报告问题,以便我们可以在新版本的WebView发布之前修复它们。
如果您有任何其他问题或疑问,请随时通过我们的 与WebView小组。
Android 7.0为OpenGL ES 3.2增加了框架接口和平台支持,包括:
来源: