![手机和平板电脑上的 Android 4.4](https://developer.android.google.cn/static/images/kk-devices.png?authuser=6&hl=uk)
欢迎使用 Android 4.4 KitKat!
Android KitKat 将 Android 所有最具创新、最美妙和最有用的功能推广至全球更多的设备。
本文简要介绍了面向开发者的新变化。
如需详细了解 KitKat 个人版,请访问 www.android.com。
让 Android 适用于所有人
Android 4.4 可在比以往更广泛的设备(包括全球数百万台低至 512MB RAM 的入门级设备)上快速、流畅且灵敏地运行。
KitKat 简化了每个主要组件以减少内存使用量,并引入了新的 API 和工具来帮助您打造创新、响应迅速且内存效率高的应用。
开发新一代 Android 设备的原始设备制造商 (OEM) 可以利用有针对性的推荐和选项高效运行 Android 4.4,即使在低内存设备上也是如此。Dalvik JIT 代码缓存调整、内核同页合并 (KSM)、zRAM 交换和其他优化有助于管理内存。原始设备制造商 (OEM) 可以利用新的配置选项来微调进程的内存不足水平、设置图形缓存大小、控制内存回收等。
在 Android 本身中,对系统所做的更改可以改善内存管理并减少内存占用。核心系统进程经过删减,减少了对堆的使用,现在它们更加积极地保护系统内存,使其免受消耗大量 RAM 的应用的影响。当多项服务同时启动时(例如当网络连接发生变化时),Android 现在会以小组的形式依次启动这些服务,以避免高峰内存需求。
对于开发者来说,Android 4.4 可帮助您在所有设备上交付高效且响应迅速的应用。利用 ActivityManager.isLowRamDevice() 这个新 API,您可以调整应用行为以匹配设备的内存配置。 您可以根据需要修改或停用大内存功能,具体取决于您要在入门级设备上支持的用例。如需详细了解如何针对低内存设备优化应用,请点击此处。
新工具还能为您提供深入而实用的应用内存使用情况的分析数据。procstats 工具详细说明了一段时间内的内存使用情况,以及前台应用和后台服务的运行时间和内存占用情况。您也可以使用设备端视图作为新的开发者选项。meminfo 工具得到增强,可以更轻松地发现内存趋势和问题,还可以显示以前不可见的额外内存开销。
通过主机卡模拟实现新的 NFC 功能
Android 4.4 引入了新的平台支持,支持通过主机卡模拟 (HCE) 进行基于 NFC 的安全交易,包括付款、会员卡、卡访问、公交卡和其他自定义服务。借助 HCE,Android 设备上的任何应用都可以模拟 NFC 智能卡,以便用户通过点按发起与所选应用的交易,无需在设备中配置安全元件 (SE)。应用还可以使用新的读取器模式作为 HCE 卡和其他基于 NFC 的交易的读取器。
![感应式付款符号](https://developer.android.google.cn/static/images/kk-contactless-card.png?authuser=6&hl=uk)
Android HCE 模拟基于 ISO/IEC 7816 的智能卡,这些卡使用感应式 ISO/IEC 14443-4 (ISO-DEP) 协议进行传输。如今,许多系统都在使用这些卡,包括现有的 EMVCO NFC 付款基础架构。Android 以 ISO/IEC 7816-4 中定义的应用标识符 (AID) 为基础,将交易路由到正确的 Android 应用。
应用会在其清单文件中声明其支持的 AID,以及表示可用支持类型的类别标识符(例如“付款”)。如果多个应用支持同一类别中的同一个 AID,Android 会显示一个对话框,让用户选择要使用的应用。
当用户在销售终端上触碰付款时,系统会提取首选 AID 并将交易路由到正确的应用。应用读取交易数据,可以使用任何本地或基于网络的服务来验证然后完成交易。
Android HCE 要求设备具有 NFC 控制器。大多数 NFC 控制器都已广泛支持 HCE,这些控制器为 HCE 和 SE 交易提供动态支持。支持 NFC 的 Android 4.4 设备将提供触碰付款功能,方便您使用 HCE 轻松付款。
打印框架
Android 应用现在可以通过 WLAN 或云托管服务(如 Google 云打印)打印任何类型的内容。在支持打印的应用中,用户可以查找可用的打印机、更改纸张大小、选择要打印的具体页面,以及打印几乎任何类型的文档、图片或文件。
Android 4.4 引入了对打印的原生平台支持,以及用于管理打印和新增打印机类型支持的 API。平台提供了一个打印管理器,用于在请求打印的应用和已安装的处理打印请求的打印服务之间进行协调。打印管理器提供共享服务和系统打印界面,以便用户一致地控制从任何应用执行的打印操作。打印管理器还可确保内容在从应用传递到打印服务的各个进程时的安全性。
![横向模式移动设备,显示了打印机支持功能](https://developer.android.google.cn/static/images/kk-print-land-n5.jpg?authuser=6&hl=uk)
您可以向应用添加打印支持,或开发打印服务以支持特定类型的打印机。
打印机制造商可以使用新的 API 开发自己的打印服务 - 一种可插入组件,用于添加供应商专用逻辑和服务,以便与特定类型的打印机进行通信。他们可以构建打印服务并通过 Google Play 分发服务,让用户可轻松地在自己的设备上找到并安装这些服务。与其他应用一样,您可以随时通过无线下载服务更新打印服务。
客户端应用可以使用新的 API 向其应用添加打印功能,只需极少的代码更改即可。在大多数情况下,您应向操作栏添加打印操作以及用于选择要打印的项的界面。您还可以实现 API 来创建打印作业、向打印管理器查询状态以及取消作业。这样一来,您可以输出几乎任何类型的内容,包括本地图片和文档、网络数据或渲染到画布的视图。
为实现最广泛的兼容性,Android 使用 PDF 作为主要的打印文件格式。在打印之前,您的应用需要生成适当分页的 PDF 版本内容。为方便起见,Printing API 提供原生和 WebView 辅助程序类,以便您使用标准的 Android 绘图 API 创建 PDF。如果您的应用知道如何绘制内容,则可以快速生成用于打印的 PDF。
大多数搭载 Android 4.4 的设备都会预安装 Google 云打印作为打印服务,以及几个支持打印的 Google 应用,包括 Chrome、云端硬盘、图库和 QuickOffice 等。
存储访问框架
新的存储访问框架可让用户轻松浏览和打开其所有首选文档存储提供程序中的文档、图片和其他文件。借助易用的标准界面,用户可以在应用和提供程序中以一致的方式浏览文件和访问最近使用的文件。
![移动设备展示新存储访问框架内的已打开边栏](https://developer.android.google.cn/static/images/kk-saf2-n5.jpg?authuser=6&hl=uk)
![在移动设备上展示新存储访问框架中集成的 Box 服务](https://developer.android.google.cn/static/images/kk-saf1-n5.jpg?authuser=6&hl=uk)
Box 和其他平台已将其服务集成到存储访问框架中,让用户可以轻松通过系统内的应用访问其文档。
云存储服务或本地存储服务可以通过实现封装其服务的新文档提供程序类来参与此生态系统。提供程序类包含向系统注册提供程序以及管理在提供程序中的浏览、读取和写入文档所需的所有 API。文档提供程序可让用户访问以文件形式表示的任何远程或本地数据,包括文本、照片、壁纸、视频和音频等。
如果您为云端或本地服务构建文档提供程序,可以将它作为现有 Android 应用的一部分提供给用户。下载并安装该应用后,用户就可以通过任何参与框架的应用即时访问您的服务。这有助于您提高曝光率和用户互动度,因为用户更容易找到您的服务。
如果您开发用于管理文件或文档的客户端应用,则只需使用新的 CREATE_DOCUMENT 或 OPEN_DOCUMENT intent 打开或创建文件,即可与存储访问框架集成。系统会自动显示用于浏览文档(包括所有可用的文档提供程序)的标准界面。
您可以一次性为所有提供程序集成客户端应用,而无需任何供应商专用代码。在用户添加或移除提供程序后,他们可以继续通过您的应用访问他们首选的服务,无需更改或更新代码。
存储访问框架与现有的 GET_CONTENT intent 集成,因此用户还可以通过新的系统界面访问其之前的所有内容和数据源,以便进行浏览。应用可以继续使用 GET_CONTENT 作为允许用户导入数据的方式。存储访问框架和用于浏览的系统界面可让用户更轻松地查找和从更多来源导入数据。
大多数搭载 Android 4.4 的设备都将配备预先集成为文档提供程序的 Google 云端硬盘和本地存储空间,处理文件的 Google 应用也使用新框架。
低功耗传感器
传感器批处理
Android 4.4 引入了对硬件传感器批处理的平台支持,这是一项新的优化,可以显著降低持续进行的传感器活动所消耗的电量。
通过传感器批处理,Android 可与设备硬件配合使用,高效地批量收集和传递传感器事件,而不是在检测到传感器事件时单独收集和传递。这样,设备的应用处理器可一直保持低功耗空闲状态,直到批量传递完毕。您可以使用标准事件监听器从任何传感器请求批处理事件,并控制接收批处理事件的时间间隔。您还可以请求在批处理周期之间立即传送事件。
传感器批处理非常适合低功耗、长时间运行的用例,如健身、位置跟踪、监控等。它可以提高应用的效率,并让您持续跟踪传感器事件,即使在屏幕关闭且系统处于休眠状态时也是如此。
传感器批处理功能目前在 Nexus 5 上提供,我们正在与芯片组合作伙伴合作,以尽快将其推广到更多的设备。
![展示全新步测器支持的移动设备](https://developer.android.google.cn/static/images/kk-sensors-moves-n5.jpg?authuser=6&hl=uk)
![展示全新计步功能的移动设备](https://developer.android.google.cn/static/images/kk-sensors-runtastic-n5.jpg?authuser=6&hl=uk)
Moves 和 Runtastic Pedometer 正使用硬件步测器提供长时间运行的低功耗服务。
步测器和计步器
Android 4.4 还增加了对两种新的复合传感器(步测器和计步器)的平台支持,这两种传感器可让您的应用在用户步行、跑步或爬楼梯时跟踪步数。这些新的传感器在硬件中实现以实现低功耗。
步测器会分析加速度计输入,以识别用户何时迈出一步,然后每一步都触发一个事件。计步器会跟踪自设备上次重新启动以来的总步数,步数的每次变化都会触发一个事件。由于平台和底层硬件中内置了逻辑和传感器管理,因此您无需在应用中维护自己的检测算法。
步测器和计步器传感器目前在 Nexus 5 上可用,我们正在与芯片组合作伙伴合作,以尽快将其推广到新设备。
短信提供程序
如果您开发了使用短信或彩信的即时通讯应用,则您现在可以使用共享短信提供程序和新的 API 来管理应用的消息存储和检索机制。新的短信提供程序和 API 为所有处理短信或彩信的应用定义了标准化交互模型。
除了新的提供程序和 API 之外,Android 4.4 还引入了用于接收消息和向提供程序写入内容的新语义。收到消息后,系统会使用新的 SMS_DELIVER intent 将其直接路由到用户的默认即时通讯应用。其他应用仍然可以使用 SMS_RECEIVED intent 监听传入的消息。此外,系统现在仅允许默认应用将消息数据写入提供程序,不过其他应用可以随时读取数据。非用户默认应用的应用仍然可以发送消息 - 系统会代表应用处理将这些消息写入提供程序的工作,以便用户可以在默认应用中查看消息。
新的提供程序和语义有助于改善安装了多个即时通讯应用的用户体验,并可帮助您使用完全受支持、向前兼容的 API 构建新的消息传递功能。
开发漂亮应用的新方式
![显示新的沉浸模式功能的移动设备](https://developer.android.google.cn/static/images/kk-immersive-n5.jpg?authuser=6&hl=uk)
新的沉浸模式让应用可以利用屏幕上的每一个像素来显示内容和捕获触摸事件。
全屏沉浸模式
现在,您的应用可以使用设备屏幕上的每一个像素来展示您的内容并捕获触摸事件。Android 4.4 新增了一种全屏沉浸模式,让您可以在手机和平板电脑上创建从一个边缘延伸到另一个边缘的全出血界面,并隐藏所有系统界面,例如状态栏和导航栏。它非常适合丰富的视觉内容,例如照片、视频、地图、图书和游戏。
在新模式下,系统界面会保持隐藏状态,即使在用户与您的应用或游戏互动时也是如此。您可以从屏幕上的任何位置(甚至是原本会被系统栏占用的区域)捕获触摸事件。这样,您就可以在应用或游戏中创建更大、更丰富、更具沉浸感的界面,同时减少视觉干扰。
为了确保用户始终可以从全屏沉浸模式下轻松、一致地访问系统界面,Android 4.4 支持一种新的手势 - 在沉浸模式下,现在从屏幕顶部或底部边缘滑动时,可以显示系统界面。
如需返回沉浸模式,用户可以轻触进度条边界之外的屏幕,或等待一小段时间,让进度条自动隐藏。为了提供一致的用户体验,新手势还会与之前隐藏状态栏的方法配合使用。
用于动画场景的转场框架
大多数应用都是围绕若干显示不同操作的关键界面状态来构建其流程。许多应用还使用动画来帮助用户通过这些状态和每种状态中提供的操作了解应用的进度。为了更轻松地在应用中创建高品质动画,Android 4.4 引入了一种新的过渡框架。
利用过渡框架,您可以定义场景(通常是视图层次结构)和过渡,从而描述如何在用户进入或退出场景时为场景添加动画效果或转换场景。您可以使用多种预定义的过渡类型,根据特定属性(例如布局边界或可见性)为场景添加动画效果。还有一种自动过渡类型,可以在场景转换过程中自动淡出、移动视图以及调整视图大小。此外,您还可以定义自定义转场效果,为对应用最重要的属性添加动画效果,并且您可以根据需要插入自己的动画样式。
借助过渡框架,您还可以即时为界面变化添加动画效果,而无需定义场景。例如,您可以对视图层次结构进行一系列更改,然后让 TransitionManager 针对这些更改自动运行延迟过渡。
设置过渡效果后,直接从应用调用过渡即可。例如,您可以调用一个方法开始过渡,在视图层次结构中进行各种更改,在下一帧中,动画将自动开始以动画方式呈现您指定的变化。
![透明系统 UI](https://developer.android.google.cn/static/images/kk-home.jpg?authuser=6&hl=uk)
应用可以使用新的窗口样式请求半透明系统栏。
如需自定义控制在应用流程中特定场景之间运行的过渡,您可以使用 TransitionManager。通过 TransitionManager,您可以定义场景与针对特定场景变化运行的转场之间的关系。
透明系统 UI 样式
为了充分利用您的内容,您现在可以使用新的窗口样式和主题来请求半透明系统界面,包括状态栏和导航栏。为确保导航栏按钮或状态栏信息清晰可辨,系统栏后面会显示细微的渐变。典型的用例是需要显示到壁纸的应用。
增强的通知访问功能
通知监听器服务现在可以查看使用通知构建器 API 构造的传入通知的详细信息。监听器服务可以访问通知的操作和新的 extra 字段(文本、图标、图片、进度、精密计时器等),以提取有关通知的更简洁的信息,并以不同的方式呈现信息。
Chromium WebView
Android 4.4 包含基于 Chromium 的全新 WebView 实现。新的 Chromium WebView 为构建和显示基于网络的内容提供最新的标准支持、性能和兼容性。
Chromium WebView 为 HTML5、CSS3 和 JavaScript 提供了广泛的支持。它支持 Chrome(Android 30)中提供的大多数 HTML5 功能。它还采用更新版 JavaScript Engine (V8),显著提升了 JavaScript 性能。
此外,新的 Chromium WebView 支持使用 Chrome 开发者工具进行远程调试。例如,您可以在开发机器上使用 Chrome 开发者工具对移动设备上的实时 WebView 内容进行检查、调试和分析。
所有搭载 Android 4.4 及更高版本的兼容设备均已包含新的 Chromium WebView。您可以立即使用新的 WebView,只需对现有应用和内容进行极少的修改。在大多数情况下,您的内容将无缝迁移到新实现。
新的媒体功能
屏幕录制
现在,您可以直接在 Android 设备上轻松为应用制作高品质视频。Android 4.4 增加了对屏幕录制的支持,并提供了一个屏幕录制实用程序,可让您在通过 USB 连接到 Android SDK 环境的设备上开始和停止录制。这是一种为应用、测试材料、营销视频等创建演示和教程的绝佳新方式。
借助屏幕录制实用程序,您可以录制设备屏幕内容的视频,并将视频作为 MP4 文件存储在设备上。您可以采用设备支持的任何分辨率和所需的比特率进行录制,输出将保留显示屏的宽高比。默认情况下,该实用程序会选择与当前屏幕方向的设备显示分辨率相同或接近的分辨率。 完成录制后,您可以直接从自己的设备上分享视频,也可以将 MP4 文件拉取到主机进行后期制作。
如果您的应用播放您不希望屏幕录制器捕获的视频或其他受保护内容,您可以使用 SurfaceView.setSecure() 将内容标记为安全。
您可以通过 Android SDK 中包含的 adb 工具使用命令 adb shell screenrecord 访问屏幕录制功能。您也可以在 Android Studio 中通过 logcat 启动它。
通过自适应播放切换分辨率
Android 4.4 在 Android 媒体框架中提供了对自适应播放的正式支持。自适应播放是 MPEG-DASH 和其他格式视频解码器的一项可选功能,支持在播放过程中无缝更改分辨率。客户端可以开始馈送新分辨率的解码器输入视频帧,输出缓冲区的分辨率会自动更改,而不会出现明显的间隙。
Android 4.4 中的分辨率切换功能可让媒体应用显著改善流式视频体验。应用可以在运行时使用现有 API 检查是否支持自适应播放,并使用 Android 4.4 中引入的新 API 来实现分辨率切换。
DASH 通用加密
Android 现在支持 MPEG-DASH 的通用加密 (CENC),提供用于管理保护内容的标准多平台 DRM 方案。应用可以通过 Android 的模块化 DRM 框架和平台 API 来利用 CENC,以支持 DASH。
HTTP 直播流式传输
Android 4.4 将该平台的 HTTP 实时流式传输 (HLS) 支持更新为第 7 版 HLS 规范(第 4 版协议)的超集。如需了解详情,请参阅 IETF 草案。
DSP 音频隧道
为了实现高性能、低功耗音频播放,Android 4.4 增加了对音频隧道技术到设备芯片组中的数字信号处理器 (DSP) 的音频隧道的平台支持。借助隧道技术,音频解码和输出音效已分流到 DSP,从而减少唤醒应用处理器的频率并降低耗电量。
音频隧道技术可以显著延长电池续航时间,在某些情况下(例如在屏幕关闭的情况下通过耳机听音乐)。例如,借助音频隧道技术,Nexus 5 的总离线音频播放时长可达 60 小时,比非隧道式音频多出 50% 以上。
媒体应用可以在受支持的设备上利用音频隧道,而无需修改代码。只要音频在设备上可用,系统就会应用隧道来优化音频播放。
![可视化工具显示音量增强器音效](https://developer.android.google.cn/static/images/kk-loudnessEnhancerAnnotated.png?authuser=6&hl=uk)
LoudnessEnhancer 效果的可视化会让语音内容听得更清楚。
音频隧道需要设备硬件支持。目前,Nexus 5 支持音频隧道功能,我们正在与芯片组合作伙伴合作,以尽快将其推广到更多设备上。
音频监控
应用可以使用 Visualizer 效果中的新监控工具来获取设备上当前正在播放的任何音频的峰值和 RMS 水平的更新。例如,您可以在音乐可视化工具中创造性地使用此功能,或在媒体播放器中实现播放计量。
音量增强器
媒体播放应用可以利用新的 LoudnessEnhancer 效果提高语音内容的音量,LoudnessEnhancer 效果起到压缩器的作用,具有专门针对语音调整的时间常数。
用于改善 AV 同步的音频时间戳
音频框架现在可以从音频输出 HAL 向应用报告呈现时间戳,以更好地同步音频和视频。借助音频时间戳,您的应用可以确定特定音频帧何时将在(或已经)在设备外呈现给用户;您可以使用时间戳信息更准确地同步音频与视频帧。
Wi-Fi CERTIFIED Miracast™
Android 4.4 设备现在可以作为与 Miracast 兼容的设备,通过 Wi-Fi 联盟 Wi-Fi 显示规范认证。为了帮助测试,新的无线显示开发者选项提供了无线显示认证的高级配置控件和设置。您可以在设置 > 开发者选项 > 无线显示认证下访问该选项。Nexus 5 是经过 Miracast 认证的无线显示设备。
RenderScript Compute
![RenderScript 优化图表](https://developer.android.google.cn/static/images/kk-rs-chart-versions.png?authuser=6&hl=uk)
针对 Android 4.4 相对于 Android 4.3 的性能基准测试,在相同的设备(Nexus 7、Nexus 10)上运行。
持续性能改进
当您的应用使用 RenderScript 时,它们将受益于 RenderScript 运行时本身持续进行性能调整,而无需重新编译。右侧图表显示了 Android 4.4 中两种热门芯片组的性能提升情况。
GPU 加速
任何在受支持的设备上使用 RenderScript 的应用都可以受益于 GPU 加速,而无需更改或重新编译代码。自 Nexus 10 首次推出 RenderScript GPU 加速功能以来,各种其他硬件合作伙伴增加了对相关支持。
现在,针对 Android 4.4 的 Nexus 5、Nexus 4、Nexus 7 (2013) 和 Nexus 10 均提供 GPU 加速功能,我们正在与合作伙伴合作,尽快将其推广至更多的设备。
Android NDK 中的 RenderScript
现在,您可以直接从原生代码利用 RenderScript。借助 Android 原生开发套件 (NDK) 中一个新的 C++ API,您可以使用与通过框架 API 提供的相同 RenderScript 功能,包括脚本内建函数、自定义内核等。
如果您要在原生代码中处理对性能要求高的大型任务,则可以使用 RenderScript 执行这些任务,并将其与原生代码集成。RenderScript 能够在各种设备上提供出色的性能,并自动支持多核 CPU、GPU 和其他处理器。
当您通过 NDK 构建使用 RenderScript 的应用时,可以将其分发到任何搭载 Android 2.2 或更高版本的设备,就像使用适用于框架 API 的 RenderScript 支持库一样。
图形
GLES2.0 SurfaceFlinger
Android 4.4 将其 SurfaceFlinger 从 OpenGL ES 1.0 升级到 OpenGL ES 2.0。
新的硬件合成器支持虚拟显示
除了主要的外部屏幕(例如 HDMI)屏幕之外,最新版本的 Android Hardware Composer 1.3 还支持对一个虚拟屏幕进行硬件合成,并改进了 OpenGL ES 互操作性。
新的连接类型
新的蓝牙配置文件
Android 4.4 支持两种新的蓝牙配置文件,让应用支持更多类型的低功耗媒体交互。Bluetooth HID over GATT (HOGP) 让应用能够以低延迟的方式将应用与低功耗外围设备(如鼠标、操纵杆和键盘)连接。蓝牙 MAP 可让您的应用与附近的设备(例如可免触摸使用的汽车终端或其他移动设备)交换消息。作为对蓝牙 AVRCP 1.3 的扩展,用户现在可以通过蓝牙设备设置系统的绝对音量。
Google 推出的 Bluedroid 蓝牙堆栈和 Android 4.2 中的 Broadcom 为 HOGP、MAP 和 AVRCP 的平台支持构建而成。Nexus 设备和其他提供兼容蓝牙功能的 Android 兼容设备可直接提供支持。
红外发射器
Android 4.4 引入了对内置 IR 发射器的平台支持,以及新的 API 和系统服务,可让您创建使用此类器的应用。
利用以下新的 API,您可以构建可让用户远程控制附近的电视、调谐器、开关和其他电子设备的应用。借助该 API,您的应用可以检查手机或平板电脑是否具有红外发射器,查询其载波频率,然后发送红外信号。
由于该 API 是搭载 Android 4.4 或更高版本的 Android 设备的标准 API,因此您的应用可以支持尽可能广泛的供应商,而无需编写自定义集成代码。
Wi-Fi TDLS 支持
Android 4.4 引入了一种无缝的方法,通过支持 Wi-Fi 通道直接链路设置 (TDLS),能够在已经连接到同一 Wi-Fi 网络的设备之间更快地流式传输媒体和其他数据。
无障碍功能
系统范围内的隐藏式字幕设置
Android 4.4 现已为字幕添加系统级偏好设置,支持在不同应用中提供更好的无障碍体验。用户可以依次前往设置 > 无障碍 > 字幕,以设置全局字幕偏好设置,例如是否显示字幕以及要使用的语言、文字大小和文字样式。
使用视频的应用现在可以访问用户的字幕设置,并调整呈现方式以满足用户的偏好。新的字幕管理器 API 可让您检查和监控用户的字幕偏好设置。字幕管理器可为您提供用户的首选字幕状态以及首选语言区域、缩放比例和文本样式。文本样式包括前景色和背景颜色、边缘属性和字体。
![横屏模式的移动设备在系统级字幕偏好设置中显示字幕](https://developer.android.google.cn/static/images/kk-captions-n5.jpg?authuser=6&hl=uk)
应用现在可以引用用户的系统级字幕偏好设置。设置中的右侧会显示预期显示样式的示例。
此外,使用 VideoView 的应用可以使用新的 API 来传递字幕流和视频流以进行渲染。系统会根据用户的系统级设置自动处理视频帧上的字幕显示。目前,VideoView 仅支持自动显示 WebVTT 格式的字幕。
所有显示字幕的应用应确保检查用户的系统级字幕偏好设置,并尽可能根据这些偏好设置渲染字幕。如需进一步了解特定设置组合的外观,您可以直接在“设置”应用中查看不同语言、大小和样式的字幕预览。
增强的无障碍功能 API
Android 4.4 扩展了无障碍功能 API,以支持更精确的结构和语义描述以及观察屏幕上的元素。借助这些新 API,开发者可以为无障碍服务提供有关屏幕元素的更多信息,从而提高可访问反馈的质量。
在无障碍功能节点中,开发者现在可以确定节点是否为弹出式窗口、获取其输入类型等。您还可以使用新的 API 来处理包含网格类信息(例如列表和表格)的节点。例如,您现在可以指定新的受支持操作、收集信息、实时区域模式等。
新的无障碍事件让开发者能够更密切地关注窗口内容发生的变化,他们现在还可以监听设备上的触摸浏览模式变化。
支持全球用户
RTL 语言区域的可绘制对象镜像
如果您的应用以使用 RTL 脚本的用户为目标,您可以使用新的 API 声明当用户的语言区域设置包含 RTL 语言时,可绘制对象应自动镜像。
将可绘制对象声明为自动镜像有助于防止应用中出现重复的资源并缩减 APK 的大小。当您拥有可重复用于 LTR 和 RTL 呈现的可绘制对象时,您可以将默认版本声明为自动镜像,然后从 RTL 资源中省略这些可绘制对象。
![](https://developer.android.google.cn/static/images/kk-pseudolocale-rtl.png?authuser=6&hl=uk)
使用 Force RTL layout 选项,可更轻松地测试应用本地化情况。
您可以在应用代码中将各种类型的可绘制对象声明为自动镜像,例如位图、9-patch、图层、状态列表和其他可绘制对象。您还可以使用新属性在资源文件中将可绘制对象声明为自动镜像。
强制使用从右到左的布局
为了在不切换到 RTL 语言的情况下更轻松地测试和调试布局镜像问题,Android 包含一个新的开发者选项,用于强制在所有应用中强制采用 RTL 布局方向。
“Force RTL layout”选项针对所有语言区域将设备切换到 RTL 布局,并以当前语言显示文本。这有助于您发现应用中的布局问题,而无需以 RTL 语言显示应用。您可以在设置 > 开发者选项 > 强制使用从右到左的布局方向访问该选项。
安全增强功能
SELinux(强制模式)
Android 4.4 将其 SELinux 配置从“宽容”更新为“强制”。这意味着,在具有强制执行政策的 SELinux 域内,潜在的政策违规行为将被屏蔽。
改进加密算法
Android 增加了对另外两种加密算法的支持,进一步提高了安全性。向密钥库提供程序添加了对椭圆曲线数字签名算法 (ECDSA) 的支持,以提高数字签名的安全性,适用于为应用或数据连接签名等场景。我们实现 Scrypt 密钥派生函数来保护用于全盘加密的加密密钥。
其他增强功能
在多用户设备上,现在按用户应用 VPN。这样,用户就可以通过一个 VPN 路由所有网络流量,而不会影响设备上的其他用户。此外,Android 现在支持 FORTIFY_SOURCE 级别 2,所有代码在编译时都会受到这些保护。FORTIFY_SOURCE 已得到增强,可与 Clang 配合使用。
内存使用率分析工具
Procstats
一个名为 procstats 的新工具可帮助您分析应用使用的内存资源,以及系统上运行的其他应用和服务所使用的资源。
Procstats 会跟踪应用在一段时间内的运行情况,提供有关应用执行时长和内存使用情况的数据,以帮助确定应用的执行效率。这对于启动在后台运行的服务的应用来说最为重要,因为它可以让您监控它们的运行时长和在此操作期间所占用的 RAM 大小。Procstats 还将收集前台应用在一段时间内的内存使用情况数据,以确定应用的整体内存配置文件。
Procstats 可以帮助您识别应用启动的后台服务。您可以跟踪这些服务持续运行的时长以及它们在此过程中占用的 RAM 大小。此外,Procstats 还可让您分析位于前台的应用,根据应用在一段时间内的内存使用情况来确定其整体内存配置文件。
![](https://developer.android.google.cn/static/images/kk-procstats.png?authuser=6&hl=uk)
借助新的 procstats 工具,您可以检查应用和服务在一段时间内的内存使用率。
![](https://developer.android.google.cn/static/images/kk-meminfo.png?authuser=6&hl=uk)
通过增强的 meminfo 工具,您可以查看应用的内存用量详情。
您可以通过 Android SDK 中包含的 adb 工具 adb shell dumpsys procstats 访问 procstats。此外,如需了解设备端性能剖析,请参阅下面的“Process Stats”开发者选项。
设备内存状态和分析
Android 4.4 包含一个新的开发者选项,可让您更轻松地分析在任何设备或模拟器上运行时的应用内存配置文件。了解应用在低 RAM 设备上的内存使用情况以及性能尤为有用。您可以在设置 > 开发者选项 > 处理统计信息中访问该选项
![显示新的“Process Stats”选项的移动设备](https://developer.android.google.cn/static/images/kk-proc-device-overview-n5.jpg?authuser=6&hl=uk)
![移动设备在新的“Process Stats”选项中展示使用详情](https://developer.android.google.cn/static/images/kk-proc-device-detail-n5.jpg?authuser=6&hl=uk)
进程统计信息是检查应用内存使用情况的一种便捷方式。您可以查看您的应用与其他应用的对比情况,并放大有关您的应用或其后台服务的特定数据。
根据使用新的 procstats 服务收集的数据,Process Stats 选项可向您显示有关应用内存使用情况的各种高级指标。在主屏幕上,您可以查看系统内存状态的摘要。绿色表示 RAM 使用率较低的相对时间,黄色表示中等 RAM 使用率,红色表示高(临界)RAM 使用率。
摘要下方是一个列表,其中汇总了每个应用的系统内存负载。对于每个应用,蓝色条表示其进程的相对计算内存负载(运行时间 x avg_pss),百分比数字表示在后台使用的相对时间量。您可以过滤列表以仅显示前台、后台或缓存的进程,还可以包含或排除系统进程。您还可以将数据收集的时长更改为 3 小时、6 小时、12 小时或 24 小时,并且可以包含或排除 uss 内存。
要单独深入了解特定应用的内存使用情况,请点按该应用。现在,您可以针对每个应用查看所消耗内存的摘要,以及该应用已运行的收集间隔所占的百分比。您还可以查看在收集期间以及应用服务下方的平均用量和最大用量,以及它们已运行的时间百分比。
使用 Process Stats 中的数据分析应用,可以发现问题并就应用可能的优化提出建议。例如,如果应用运行时间超出其预期,或在一段时间内使用的内存过多,则代码可能存在 bug,您可以解决这类 bug,以提升应用性能,尤其是在 RAM 低的设备上运行时。