Android 16 Baklava 来了,来看看开发者预览版给我们带来了什么

Android 15 估计很多人还没用上,Android 16 这就要来了,官方 2025 年将发布两个大 Android API 版本 :

而对于 Android 16 ,尽管它还是保留了以甜点为主题的命名约定,但在它的代号被命名为 Baklava,而不是以字母 W 开头的甜点(Android 版本的代号一直以字母顺序排列:Android 2.0 Eclair、2.2 Froyo、2.3 Gingerbread...15 Vanilla Ice Cream),而 Android 16 明显打破了这个约定:

并且从 Android 上看, 16 旨在为 Android 建立一个基于主干的开发模型,系统代码将进行更频繁的小代码更改,而不是之前每隔几个月进行一次较大的代码更改,从这点看 Android 16 会是一个较大变化的版本。

ProfilingManager

在 15 的时候 Android 添加了 ProfilingManager,让应用能够使用 Perfetto 请求收集性能分析数据,例如启动或 ANR 等情况,而从 Android 16 开始,ProfilingManager 现在提供了系统触发的分析。

现在 App 可以使用 ProfilingManager#addProfilingTriggers() 来注册接收需要的信息,包括用于基于 Activity 的冷启动的 onFullyDrawn 和 ANR。

kotlin 复制代码
val anrTrigger = ProfilingTrigger.Builder(
                ProfilingTrigger.TRIGGER_TYPE_ANR
            )
                .setRateLimitingPeriodHours(1)
                .build()

val startupTrigger: ProfilingTrigger =  //...

mProfilingManager.addProfilingTriggers(listOf(anrTrigger, startupTrigger))

ApplicationStartInfo

同样,在 15 中 Android 添加的 ApplicationStartInfo,用于支持应用查看进程启动的原因、启动类型、开始时间、限制和其他有用的诊断数据。

而 Android 16 添加了 getStartComponent 来区分触发启动的组件类型,从而帮助开发者优化应用的启动流程。

触觉反馈

从 Android 11 开始,系统就增加了对更复杂的触觉效果的支持,更高级的 actuators 可以通过设备定义的语义基元的 VibrationEffect.Compositions 来支持这些效果。

而 Android 16 添加了新的 haptic API ,可以让应用定义触感反馈效果的振幅和频率曲线,同时抽象出设备功能之间的差异:

  • VibratorEnvelopeEffectInfo :提供有关振动器硬件功能和限制的信息,如支持的最大控制点数、单个区段的最小和最大持续时间、最大总持续时间等
  • VibratorFrequencyProfile:描述不同振动频率下 Vibrator 的输出。

这些新 API 消除了 App 在开发时需要对设备特定功能的 if 判断,开发人员可以直接使用 API 去创建自定义触觉反馈效果。

Job

Android 16 还引入了 JobScheduler#getPendingJobReasons(int jobId),它可以返回 Job 待处理的多个原因,比如开发者设置了显式约束条件和系统设置了隐式约束条件:

关于 Job Android 16 还引入了 JobScheduler#getPendingJobReasonsHistory(int jobId),从而支持返回最近约束更改的列表:

对于给定的 jobId,返回任务可能一直等待执行的原因的有限历史视图,返回的列表由 PendingJobReasonsInfo 组成,每个对象都包含一个自 epoch 以来的时间戳以及一个 ERROR(PendingJobReason constants/android.app.job.JobScheduler.PendingJobReason PendingJobReason constants) 表示

这些 API 调整,可以帮助开发者在调试 Job 时分析无法执行的原因,尤其是在看到某些任务的成功率降低或 Job 完成出现延迟问题时,可以更好地了解到某些 Job 是由于系统定义的约束还是由于显式设置的约束而未完成。

另外,从 Android 16 开始,Job 的执行会被优化调整,例如:

  • 在应用对用户可见时启动,并在应用不可见后继续的 Job 将遵守 Job runtime 配额
  • 与前台服务同时执行的 Job 将遵守 Job runtime 配额

配额(Quotas):简单来说,就是系统必须将执行时间分配给加急 Job,而执行时间不是无限的,相反每个应用都会收到一个执行时间配额,当应用使用其执行时间并达到其分配的配额时,在配额刷新之前,App 会无法再执行加速工作,这是 Android 有效地平衡应用 App 之间的资源策略,而限制前台执行时间的系统级配额决定了加急 Job 是否可以启动。

简单说就是,Android 16 会根据不同场景来调整常规和加速 Job 执行运行时配额,该优化调整会影响 WorkManager、JobScheduler 和 DownloadManager 调度的任务,要调试 Job 停止的原因,可以通过调用 WorkInfo.getStopReason 或则 JobParameters.getStopReason 来记录 Job 停止的原因。

最后,Android 16 完全弃用 JobInfo#setImportantWhileForeground ,这个人方法自 Android 12 (API 31) 开始已经弃用,从 Android 16 开始它将不再有效运行,并且 JobInfo#isImportantWhileForeground 方法从 Android 16 开始也将返回 false。

自适应刷新

Android 15 中引入的自适应刷新率 Adaptive refresh rate (ARR) ,从而支持硬件上的显示刷新率能够使用离散的 VSync 步骤适应内容帧速率,从而降低了功耗,同时消除了可能引起卡顿的模式切换。

但是尽管 Android 15 增加了对自适应刷新率的平台级支持,但它并没有为应用提供实际利用它的方法,而在 Android 16 DP2 在恢复 getSupportedRefreshRates() 的同时引入了 hasArrSupport()getSuggestedFrameRate(int) ,从而让 App 可以更轻松地适配 ARR。

之前 getSupportedRefreshRates 在 **API level 23 的时候被 deprecated ** ,改成了 getSupportedModes ,现在它又复活了。

通过 getSuggestedFrameRate(int) 可以在给定描述性帧速率类别的情况下,获取显示器定义的帧速率:

java 复制代码
float desiredMinRate = display.getSuggestedFrameRate(FRAME_RATE_CATEGORY_NORMAL);
  Surface.FrameRateParams params = new Surface.FrameRateParams.Builder().
                                      setDesiredRateRange(desiredMinRate, Float.MAX).build();
  surface.setFrameRate(params);

在不需要快速渲染速率的动画可以使用 FRAME_RATE_CATEGORY_NORMAL 来获取建议帧速率, 然后建议的帧速率可以在 Surface.FrameRateParams.Builder.setDesiredRateRange 设置。

同时 RecyclerView 1.4 页在内部支持了 ARR(例如 fling 或者 smooth scroll 下),并且未来 ARR 支持会添加到更多 Jetpack 库中。

Photo picker

Photo picker 是 Android 为用户提供了一种安全的媒体选择内置方式,它可以授予应用访问本地和云存储中所选图像和视频的权限,而不是让 App 访问到整个媒体库。

通过 Google 系统更新和 Google Play 服务组合使用模块化系统组件,它可支持到 Android 4.4(API 级别 19)。

而 Android 16 本次更新的预览版包含了新的 API,支持从云媒体提供商搜索 Android 照片选择器,照片选择器中的搜索功能未来也将适配推出

Wifi 测距

在 Android 15 版本就增加了 Wi-Fi 测距的支持,这是一种可实现精确室内位置跟踪的定位技术,Wi-Fi 测距允许 <1m 精度,使其比使用信号强度测量的传统基于 Wi-Fi 的位置跟踪精确得多。

Wi-Fi 测距基于飞行时间而不是信号强度,因此更加精确。

而 Android 16 在采用 WiFi 6 的 802.11az 的受支持设备上,增加了对 WiFi 位置功能的安全功能支持,主要是应用能够将协议的更高精度、更强的可扩展性和动态调度与安全增强功能相结合,包括基于 AES-256 的加密和防止 MITM 攻击,例如通过 802.11az 与 Wi-Fi 6 标准集成解锁笔记本电脑或车门。

Predictive back

尽管 Android 15 默认启用系统预测性返回动画,但应用是否支持这些动画仍取决于应用本身。

而为了帮助 App 支持这些 API,Android 16 添加了新的 API,可帮助开发者在手势导航中启用预测性返回系统动画,例如返回主页动画,通过向新的 PRIORITY_SYSTEM_NAVIGATION_OBSERVER , App 可以在系统处理返回导航时接收常规的 onBackInvoked 调用,而不会影响正常的返回导航流程。

Android 16 还添加了 finishAndRemoveTaskCallbackmoveTaskToBackCallback ,通过使用 OnBackInvokedDispatcher 注册这些回调,系统可以在调用返回手势时触发特定行为并播放相应的提前动画。

参考资料

相关推荐
drebander12 分钟前
MySQL EXPLAIN 详解:一眼看懂查询计划
android·数据库·mysql
留白的云14 分钟前
Android app反编译 攻与防
android·安全性测试
沙尘暴炒饭21 分钟前
uniapp中的uni-file-picker组件上传多张图片到服务器
前端·uni-app
tester Jeffky24 分钟前
深入探索Vue.js中的v-show指令:动态控制DOM元素的高级技巧
前端·javascript·vue.js
quweiie25 分钟前
thinkphp8+layui分页
前端·layui·thinkphp·分页样式
暴躁的白菜39 分钟前
Fiddler简单使用
前端·测试工具·fiddler
我爱学习_zwj43 分钟前
Web APIs - 第5章笔记
开发语言·前端·javascript
KpLn_HJL1 小时前
leetcode - 1530. Number of Good Leaf Nodes Pairs
android·java·leetcode
m0_748245171 小时前
vue登录成功之后的token处理
前端·javascript·vue.js
S-X-S1 小时前
HTML - 蛆(畅享版)
前端·html