作者 / 产品管理副总裁、Android 开发者 Matthew McCullough
Android 16 的第二个开发者预览版可用于测试您的应用了。本预览版的更新旨在增强应用体验、改善电池续航时间和提高性能,同时最大程度地减少兼容性问题。您的反馈对于我们全面了解这项工作的影响至关重要。
系统触发的性能分析
我们在 Android 15 中添加了 ProfilingManager,使应用能够在实际部署的公共设备上使用 Perfetto 请求收集分析数据。为了帮助捕获具有挑战性的跟踪场景 (例如启动或 ANR),ProfilingManager 现在引入了 "系统触发的性能分析" 功能。应用可以使用 ProfilingManager#addProfilingTriggers() 方法注册,以便接收有关这些流程的信息。此版本中涵盖的流程包括 onFullyDrawn (基于 Activity 的冷启动) 和 ANR。
val anrTrigger = ProfilingTrigger.Builder(
ProfilingTrigger.TRIGGER_TYPE_ANR
)
.setRateLimitingPeriodHours(1)
.build()
val startupTrigger: ProfilingTrigger = //...
mProfilingManager.addProfilingTriggers(listOf(anrTrigger, startupTrigger))
🔗 ProfilingManager#addProfilingTriggers()
https://developer.android.google.cn/reference/android/os/ProfilingManager#addProfilingTriggers%28java.util.List%3Candroid.os.ProfilingTrigger%3E%29
在 ApplicationStartInfo 中
启动组件
我们在 Android 15 中添加了 ApplicationStartInfo,让应用可以查看进程启动的原因、启动类型、启动时间、节流和其他有用的诊断数据。我们在 Android 16 中新增了 getStartComponent() 来区分触发启动的组件类型,有助于优化应用的启动流程。
🔗 getStartComponent()
https://developer.android.google.cn/reference/android/app/ApplicationStartInfo#getStartComponent%28%29
更丰富的触感反馈
最初 Android 对触感反馈致动器的控制有限。
我们在 Android 11 中增加了对更复杂的触感反馈效果的支持,因而更高级的致动器可以通过设备定义的语义基元的 VibrationEffect.Compositions 提供支持。
🔗 VibrationEffect.Compositions
https://developer.android.google.cn/reference/android/os/VibrationEffect.Composition
我们在 Android 16 中新增了触感反馈 API,以便应用定义触感反馈效果的振幅和频率曲线,同时抽象化设备功能之间的差异。
🔗 触感反馈 API
https://developer.android.google.cn/reference/android/os/vibrator/package-summary
更好的作业自省
我们在 Android 16 中引入了 JobScheduler#getPendingJobReasons(int jobId),该方法可以返回导致作业处于挂起状态的多种原因,包括开发者设置的显式约束条件和系统设置的隐式约束条件。
🔗 JobScheduler#getPendingJobReasons(int jobId)
https://developer.android.google.cn/reference/android/app/job/JobScheduler#getPendingJobReasons%28int%29
我们还引入了 JobScheduler#getPendingJobReasonsHistory(int jobId),用于返回最新约束更改的列表。
🔗 JobScheduler#getPendingJobReasonsHistory(int jobId)
https://developer.android.google.cn/reference/android/app/job/JobScheduler#getPendingJobReasonsHistory%28int%29
此 API 可以帮助您调试作业可能无法执行的原因,特别是在您看到某些任务的成功率降低或影响作业完成的延迟问题时。这也可以更好地帮助您了解某些作业无法完成是由于系统定义的约束还是显式设置的约束所致。
自适应刷新率
Android 15 中引入了自适应刷新率 (ARR),让您能够在受支持的硬件上使用离散 VSync 步骤使显示刷新率适应内容帧速率。这不仅降低了功耗,也消除了可能因卡顿导致的模式切换。
在 Android 16 DP2 中,我们在恢复 getSupportedRefreshRates() 的同时引入了 hasArrSupport() 和 getSuggestedFrameRate(int),让您的应用可以更轻松地利用 ARR。
RecyclerView 1.4 在从快速滑动或平滑滚动停止时内部支持 ARR。我们将继续努力将 ARR 支持添加到更多 Jetpack 库中。这篇帧速率文章涵盖了许多您可用于设置帧速率的 API,以便您的应用可以直接利用 ARR。
🔗 getSupportedRefreshRates()
https://developer.android.google.cn/reference/android/view/Display#getSupportedRefreshRates%28%29
🔗 hasArrSupport()
https://developer.android.google.cn/reference/android/view/Display#hasArrSupport%28%29
🔗 getSuggestedFrameRate(int)
https://developer.android.google.cn/reference/android/view/Display#getSuggestedFrameRate%28int%29
🔗 RecyclerView 1.4
https://developer.android.google.cn/jetpack/androidx/releases/recyclerview#version_14_2
🔗 从快速滑动或平滑滚动停止
https://android.googlesource.com/platform/frameworks/support/+/a1e9ab3e5fd52e885731bd762ff7dd4a64b25505
🔗 帧速率文章
https://developer.android.google.cn/media/optimize/performance/frame-rate
↕️ 上下滑动查看更多注释链接
作业执行优化
从 Android 16 开始,我们将根据以下因素调整常规和加急作业执行运行时配额:
应用位于哪个应用待机存储分区中;活跃的应用待机存储分区将获得充足的运行时配额。
对于在应用对用户可见时启动并在应用变得不可见后继续执行的作业,按作业运行时配额执行。
与前台服务同时执行的作业,按作业运行时配额执行。如果您需要执行可能需要很长时间的数据传输,请考虑使用用户发起的数据传输。
🔗 应用待机存储分区
https://developer.android.google.cn/topic/performance/appstandby
🔗 用户发起的数据传输
https://developer.android.google.cn/develop/background-work/background-tasks/uidt
注意:如果您想要进一步了解如何调试和测试行为更改,欢迎您阅读有关 JobScheduler 配额优化的更多信息。
🔗 JobScheduler 配额优化
https://developer.android.google.cn/about/versions/16/behavior-changes-all#job-quota-opt
完全弃用 JobInfo#setImportantWhileForeground
JobInfo.Builder#setImportantWhileForeground(boolean) 方法指示调度应用在前台运行或暂时不受后台限制时作业的重要性。
🔗 JobInfo.Builder#setImportantWhileForeground(boolean)
https://developer.android.google.cn/reference/android/app/job/JobInfo.Builder#setImportantWhileForeground%28boolean%29
自 Android 12 (API 31) 以来,此方法已弃用。从 Android 16 开始,此方法将不再有效,调用此方法将被忽略。
这项功能的移除也适用于 JobInfo#isImportantWhileForeground()。从 Android 16 开始,如果调用此方法,系统将返回 false。
🔗 JobInfo#isImportantWhileForeground()
https://developer.android.google.cn/reference/android/app/job/JobInfo#isImportantWhileForeground%28%29
已弃用的干扰性无障碍功能公告
Android 16 DP2 弃用了干扰性无障碍功能公告,其特征为使用 announceForAccessibility 或调度 TYPE_ANNOUNCEMENT AccessibilityEvents。这些公告会导致使用 TalkBack 和 Android 屏幕阅读器用户的用户体验不一致,而替代方案可以更好地满足各种 Android 辅助技术中更广泛的用户需求。
替代方案示例:
对于重要的界面更改 (如窗口更改),请使用 Activity.setTitle(CharSequence) 和 setAccessibilityPaneTitle(java.lang.CharSequence)。在 Compose 中,请使用 Modifier.semantics { paneTitle = "paneTitle" }
如需通知用户关键界面的更改,请使用 setAccessibilityLiveRegion(int)。在 Compose 中,使用 Modifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive] }。请谨慎使用这些方法,因为它们可能会在每次更新视图或可组合项后生成公告。
如需通知用户有关错误的信息,请发送类型为 AccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR 的 AccessibilityEvent 并设置 AccessibilityNodeInfo#setError(CharSequence),或者使用 TextView#setError(CharSequence)。
🔗 announceForAccessibility
https://developer.android.google.cn/reference/android/view/View#announceForAccessibility%28java.lang.CharSequence%29
🔗 TYPE_ANNOUNCEMENT AccessibilityEvents
https://developer.android.google.cn/reference/android/view/accessibility/AccessibilityEvent#TYPE_ANNOUNCEMENT
🔗 Activity.setTitle(CharSequence)
https://developer.android.google.cn/reference/android/app/Activity#setTitle%28java.lang.CharSequence%29
🔗 setAccessibilityPaneTitle(java.lang.CharSequence)
https://developer.android.google.cn/reference/android/view/View#setAccessibilityPaneTitle%28java.lang.CharSequence%29
🔗 Modifier.semantics { paneTitle = "paneTitle" }
https://developer.android.com/reference/kotlin/androidx/compose/ui/semantics/package-summary#%28androidx.compose.ui.semantics.SemanticsPropertyReceiver%29.paneTitle%28%29
🔗 setAccessibilityLiveRegion(int)
https://developer.android.google.cn/reference/android/view/accessibility/AccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
🔗 Modifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive] }
https://developer.android.google.cn/reference/kotlin/androidx/compose/ui/semantics/package-summary#%28androidx.compose.ui.semantics.SemanticsPropertyReceiver%29.liveRegion%28%29
🔗 AccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
https://developer.android.google.cn/reference/android/view/accessibility/AccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
🔗 AccessibilityNodeInfo#setError(CharSequence)
https://developer.android.google.cn/reference/android/view/accessibility/AccessibilityNodeInfo#setError%28java.lang.CharSequence%29
🔗 TextView#setError(CharSequence)
https://developer.android.google.cn/reference/android/widget/TextView#setError%28java.lang.CharSequence%29
↕️ 上下滑动查看更多注释链接
已弃用的 announceForAccessibility API 包含有关建议替代方案的更多详细信息。
🔗 announceForAccessibility
https://developer.android.google.cn/reference/android/view/View#announceForAccessibility%28java.lang.CharSequence%29
照片选择器中的云搜索功能
照片选择器为用户提供了一种安全的内置体验,允许用户向您的应用授予本地和云端存储空间中所选图片和视频的访问权限,而不是整个媒体库的访问权限。通过结合使用 Google 系统更新与 Google Play 服务的模块化系统组件,该功能支持至 Android 4.4 (API 级别 19)。集成只需要几行代码以及相关的 Android Jetpack 库。
开发者预览版包含新的 API,可让 Android 照片选择器从云端媒体提供商中进行搜索。照片选择器中的搜索功能即将推出。
🔗 照片选择器
https://developer.android.google.cn/training/data-storage/shared/photopicker
🔗 Google 系统更新
https://support.google.com/product-documentation/answer/11412553
🔗 Google Play 服务
https://developers.google.com/android/guides/overview
🔗 模块化系统组件
https://source.android.com/devices/architecture/modular-system
🔗 Android 4.4 (API 级别 19)
https://developer.android.google.cn/reference/android/os/Build.VERSION_CODES#KITKAT
🔗 Android Jetpack 库
https://developer.android.google.cn/jetpack/androidx/releases/activity
🔗 新的 API
https://developer.android.google.cn/sdk/api_diff/b-dp2-incr/changes/pkg_android.provider
↕️ 上下滑动查看更多注释链接
具有增强安全性的测距
Android 16 在支持 Wi-Fi 6 的 802.11az 设备上,增加了在 Wi-Fi 定位中更强大的安全功能支持,使得应用能够将协议的更高准确性、更高可扩展性和动态调度与安全增强功能 (包括基于 AES-256 的加密和防止 MITM 攻击) 相结合。因此它可以在近距离的使用场景中更安全地使用,例如解锁笔记本电脑或车门。802.11az 与 Wi-Fi 6 标准相集成,并借助其基础设施和功能,从而实现更广泛的应用和更轻松的部署。
🔗 更强大的安全功能
https://developer.android.google.cn/reference/android/net/wifi/rtt/SecureRangingConfig
Health Connect 更新
我们在开发者预览版的 Health Connect 中新增了 ACTIVITY_INTENSITY,这个新数据类型是根据世界卫生组织指南有关中等和剧烈强度活动定义的。每条记录都需要包含开始时间、结束时间以及活动强度是中等还是剧烈。
Health Connect 中还包含针对健康记录进行更新的 API。这允许应用在用户明确同意的情况下读写 FHIR 格式的医疗记录。此 API 目前处于抢先体验计划阶段,欢迎报名加入我们的抢先体验计划。
🔗 抢先体验计划
https://forms.gle/43HJz4Fm2UQLWy5W8
预测性返回中的新增内容
我们在 Android 16 中添加了新的 API,以帮助您在手势导航中启用预测性返回系统动画,例如返回首页动画。通过使用新的 PRIORITY_SYSTEM_NAVIGATION_OBSERVER 注册 onBackInvokedCallback,您的应用可以随时在系统处理返回导航时接收常规的 onBackInvoked 调用,而不会影响正常的返回导航流程。
🔗 PRIORITY_SYSTEM_NAVIGATION_OBSERVER
https://developer.android.com/reference/android/window/OnBackInvokedDispatcher#PRIORITY_SYSTEM_NAVIGATION_OBSERVER
🔗 注册 onBackInvokedCallback
https://developer.android.com/reference/android/window/OnBackInvokedDispatcher#registerOnBackInvokedCallback%28int,%20android.window.OnBackInvokedCallback%29
此外,我们还在 Android 16 中新增了 finishAndRemoveTaskCallback() 和 moveTaskToBackCallback()。通过使用 OnBackInvokedDispatcher 注册这些回调,在调用返回手势时,系统可以触发特定行为并播放相应的提前动画。
🔗 finishAndRemoveTaskCallback()
https://developer.android.google.cn/reference/android/window/SystemOnBackInvokedCallbacks#finishAndRemoveTaskCallback%28android.app.Activity%29
🔗 moveTaskToBackCallback()
https://developer.android.google.cn/reference/android/window/SystemOnBackInvokedCallbacks#moveTaskToBackCallback%28android.app.Activity%29
将于 2025 年发布的两个 Android API 版本
本预览版适用于 Android 计划在 2025 年第二季度推出的下一个主要版本,并且我们计划在第四季度发布另一个带有新开发者 API 的版本。第二季度发布的主要版本将是 2025 年内唯一包含可能影响应用的计划行为变更的版本。第四季度发布的次要版本将包含功能更新、优化和问题修复,但不包括任何影响应用的行为变更。
我们将继续以季度为周期发布 Android 版本。为确保质量始终如一,我们会在两次 API 版本发布之间提供增量更新 (第一和第三季度)。我们正在积极与设备合作伙伴合作,为尽可能多的设备提供第二季度版本。
Google Play 中应用的目标 API 级别要求及相关日期保持不变;我们计划每年发布一次要求,且仅与主要 API 级别相关联。
如何做好准备
除了对下一个主要版本进行兼容性测试之外,请您确保根据新的 SDK 编译应用,并使用兼容性框架启用 targetSdkVersion 控制的行为变更,以便进行早期测试。
应用兼容性
Android 16 预览版计划自 2024 年 11 月开始执行,持续到今年最终公开发布。我们将在开发阶段的各个关键里程碑时刻为您的开发和测试环境提供更新。每次更新都会包括 SDK 工具、系统映像、模拟器、API 参考文档和 API 差异。欢迎您浏览博客和 Android 16 开发者网站,查看已准备好在预览版计划中进行测试的关键 API。
🔗 Android 16 开发者网站
https://developer.android.google.cn/about/versions/16
我们计划在 2025 年第一季度末实现平台稳定性里程碑。在这一关键阶段,我们将提供最终的 SDK/NDK API,以及最终的内部 API 和面向应用的系统行为。我们预计将在 2025 年 3 月实现平台稳定性,自那时起,您将有几个月的时间在正式发布之前完成最终的测试工作。有关发布时间表的详细信息,请访问我们的 Android 开发者网站。
🔗 发布时间表的详细信息
https://developer.android.google.cn/about/versions/16/overview#timeline
开始使用 Android 16
现在,您只要刷写系统映像并更新工具,就可以开始使用开发者预览版 2 了。如果您当前正在使用开发者预览版 1,它将在无线连接的情况下自动更新到开发者预览版 2。您的反馈对我们非常重要,欢迎您在反馈页面上报告问题、提交功能请求。我们越早收到您的反馈,就能在最终版本中更充分地融入您的意见和建议。
🔗 反馈页面
https://developer.android.google.cn/about/versions/16/feedback
为获得最佳的 Android 16 开发体验,我们建议您使用 Android Studio Ladybug 功能更新的最新预览版。设置完毕后,您可以执行以下操作:
使用新的 SDK 进行编译;在 CI 环境中测试;并通过我们反馈页面的跟踪表报告问题。
测试您当前应用的兼容性;了解您的应用是否受到 Android 16 版本变更的影响,并将您的应用安装到运行 Android 16 的设备或模拟器上进行全面测试。
🔗 反馈页面
https://developer.android.google.cn/about/versions/16/feedback#issue_tracker
我们将在整个 Android 16 发布周期内定期更新预览版系统映像和 SDK。这一预览版仅供开发者使用,并不适合日常消费者。您可以手动下载预览版,安装后,您将通过 OTA 方式自动获取未来所有后续预览版和 Beta 版更新。
🔗 预览版系统映像
https://developer.android.google.cn/about/versions/16/download
🔗 手动下载预览版
https://developer.android.google.cn/about/versions/16/get
如果您已安装 Android 15 QPR Beta 版 2,并且想要刷写 Android 16 开发者预览版 2,则无需先清除设备数据。
在 Android 16 Beta 版发布之后,我们也会邀请消费者来体验 Android 16。届时,我们将会针对 Android 16 开放 Android Beta 版计划的注册入口。
欢迎您访问 Android 16 开发者网站了解本次发布的详细信息。也欢迎您持续关注 "Android 开发者" 微信公众号,及时了解更多开发技术和产品更新等资讯动态!
🔗 Android 16 开发者网站
https://developer.android.google.cn/about/versions/16
推荐阅读
如页面未加载,请刷新重试
点击屏末 | 阅读原文 | 进一步了解 Android 16 详细更新