Android16升级,预测性返回适配起来到底难不难

背景

上一篇文章说到了要开始做targetSdk36的适配工作并且介绍了如何适配自适应布局这个新特性,但除此以外,Android16还有一个新特性也必须值得注意一下,那就是预测性返回,要说这个特性,Android13里面就已经出来了,但是那会还只是存在于开发者选项里面,但是如果当你把targetSdk升级到36后,那么这个预测性返回将会被强制开启,对的,所以我们是时候要知道这个特性里面会有哪些适配点

什么是预测性返回

预测性返回(Predictive Back Gesture)是 Android 系统手势导航的一项增强功能。它允许用户在完成返回滑动操作之前,就能够提前预览即将跳转到的目标界面。例如:

  • 在当前应用界面使用返回手势时,可在应用后方提前显示主屏幕的动画预览
  • 在 Activity 之间切换时,可预览上一个Activity的界面
  • 在任务之间切换时,可预览上一个任务的界面

特性对应用造成的影响

  • onBackPressed 不再被调用:以 Android 16 为目标平台时,系统不再分发 onBackPressed 回调
  • KeyEvent.KEYCODE_BACK 不再分发:系统不再调度返回按键事件
  • 自定义返回行为失效:依赖上述 API 的自定义返回逻辑将完全不执行
  • 预测性返回动画默认启用:android:enableOnBackInvokedCallback 默认为 true
  • 应用内动画缺失:未适配 OnBackInvokedCallback 的应用在返回时无法展示预览动画

可以看到影响面还是很大的,就比如很多应用会在返回的时候做一下二次确认,在返回事件那边拦截一下,弹一个框出来,或者更常见的,一些h5页面也会做一些桥接拦截一下返回事件,做一下返回栈的处理,等等这些常见的操作,当升级到targetSdk36后将会变的无效

适配方案

方案一:迁移至受支持的返回导航API

更新依赖

替换 onBackPressed 为 OnBackPressedDispatcher

通过生命周期来驱动回调

在Fragment中,如果要处理返回事件,可以通过监听生命周期的方式

Compose应用中使用PredictiveBackHandler

方案二:临时选择停用预测性返回

预测性返回特性同样也提供了关闭的开关,可以让你的应用就算targetSdk升级至36后,也不会受特性的影响,但是这个肯定不是永久方案,建议还是尽早适配完才好

全局停用

按Activity级别停用

适配总结

综上所述,我们适配预测性返回的时候,主要需要考虑以下几点

  • 应用是否拦截返回事件?

    • 否:无需适配,预测性返回默认生效
    • 是:是否使用 AndroidX API?
      • 是:升级到 activity 1.6.0-alpha05+
      • 否:迁移到 OnBackPressedDispatcher
  • 是否需要预览动画

    • 是:实现 OnBackInvokedCallback + 动画进度
    • 否:使用 OnBackPressedDispatcher 即可
  • 是否为 Compose 应用

    • 是:使用 PredictiveBackHandler
  • 是否需要临时跳过适配

    • 是:设置 enableOnBackInvokedCallback=false

最后

个人感觉,预测性返回相对来讲好适配一些,唯一可能有点麻烦的就是要升级androidx插件版本,对于那些老项目,万年不更新插件库的来讲,可能会多出一些兼容工作,至于其他的就没别的了,它不像16kb或者应用内存限制那种特性,不定性因素比较多,因项目而异,就跟我上面那些适配总结写的一样,预测性返回适配起来有自己的公式,我们直接去套公式就行,或者更加简单粗暴的,直接扔给AI,让它去做这些事情就好了,我们更多的注意力可以放在后期的自测验证环节上

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
ai2work3 天前
ch23 综合复刻:从零做一个最小可用版本(capstone)
kotlin
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
ai2work3 天前
ch21 签名、校验与发版
kotlin
duyacode3 天前
FastAPI为什么成为默认答案
程序员