OnBackPressed 方法被弃用,那么使用什么替代方法?

文章讲述了在Android10及以上版本中,由于系统手势导航的引入,`OnBackPressed()`方法被弃用。作者推荐使用`onBackPressedDispatcher`和`OnBackPressedCallback`处理返回事件,尤其是针对Android13的预测式返回手势。开发者需更新依赖并配置清单文件以正确处理滑动返回和启动器返回事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你将任何应用程序升级到 targetSdk 33,可能会注意到在 Activities 中的 OnBackPressed() 方法已经被弃用了。

“OnBackPressed()” 的弃用原因

在开始之前,让我们谈谈为什么会有这样的变化。你可能知道,从 Android 10 开始,系统提供了手势导航功能。更详细地说,系统支持像在 iOS 设备上从左向右滑动以返回(类似于 iOS 设备)的手势。但是当手势与应用程序中的水平滑动结合时,就会出现意外的行为。用户报告说,他们有时在应用程序中水平滑动时会触发系统返回。

问题在于,Android 系统无法区分手势是用于系统返回还是应用程序的返回导航。换句话说,它无法判断应用程序是否处理了该手势。

那么,我应该使用什么替代方法呢?

现在要介绍的是 onBackPressedDispatcher。它被定义为一个调度程序,可以通过组合来注册 OnBackPressedCallback 实例,以处理 ComponentActivity.onBackPressed() 的回调。

要触发 onBackPressed 功能,只需使用 onBackPressedDispatcher.onBackPressed() 即可。如果你正在使用 ComponentActivity,则应该触发旧的 onBackPressed 方法,除非你提供了一个 OnBackPressedCallback

说到 OnBackPressedCallback,它是我们检测返回手势/导航的新方式。当用户点击返回按钮或执行返回手势(如果已启用)时,OnBackPressedDispatcher 会在需要时调用回调并启用回调。

如上所示,回调有一个布尔值参数,用于确定回调是否默认启用。在代码中,你可以在启用/禁用状态之间切换回调。当回调被启用时,handleOnBackPressed 方法会在用户进行返回导航事件时被调用。如果回调被禁用,则不会触发回调,显然,Android 系统将处理该事件。

从 Android 13 开始,系统将提供预测式返回手势,它会向用户展示他们即将通过滑动返回操作返回到启动器,以便用户可以决定是否真正想返回到启动器。为了迎接这个即将到来的功能,应用程序应该告诉系统它是否处理了滑动返回手势。

如何实现它

为了处理滑动返回手势并通知系统,你需要按照以下步骤进行操作:

  1. 1. 将 implementation "androidx.activity:activity:1.6.0-alpha05" 添加为你模块的 build.gradle 文件的依赖项。

  2. 2. 使用 compileSdk 33 和 targetSdk 33 更新你的项目。

  3. 3. 在应用程序的清单文件 <application> 标签中添加 android:enableOnBackInvokedCallBack="true"

  4. 4. 完成上述步骤后,你的应用程序不应拦截返回手势。

  5. 5. 此外,你需要从开发者选项中启用该功能,可以按照以下步骤进行操作:

    • • 设置 -> 系统 -> 开发者选项。

    • • 选择“预测式返回动画”。

完成上述步骤后,设备/模拟器将准备好显示预测式返回手势动画。

如果你将 OnBackPressedCallback 添加到 onBackPressedDispatcher,你的应用程序将处理返回按钮点击,onBackPressedDispatcher.onBackPressed() 会被调用,但不会处理滑动返回手势。换句话说,即使启用了 OnBackPressedCallback,应用程序仍然会执行预测式返回手势动画。

你应该使用 OnBackInvokedCallback 来处理返回到启动器的事件的回调。与其他回调类似,OnBackInvokedDispatcher 处理回调并在需要时调用它,你只需要注册你的回调并在停止处理事件时取消注册。

请注意,与 OnBackPressedCallback 不同,你不能以编程方式触发回调。这是因为回调与系统相关,而不是直接与我们的应用程序相关。因此,你的应用程序只能监听该事件。

通过注册回调,Android 系统将知道你的应用程序将处理该事件,系统将不会执行任何预测式返回手势动画。

资源:

  • • Android 版本 13 新功能:预测式返回手势https://developer.android.com/about/versions/13/features/predictive-back-gesture

  • • 使用 Gesture Navigation 准备你的应用程序https://developer.android.com/codelabs/gesture-navigation?hl=en#0

  • • Android 开发者文档:OnBackInvokedDispatcherhttps://developer.android.com/reference/android/window/OnBackInvokedDispatcher

Android Android 应用开发 AndroidDev 手势 Androidx

转自:OnBackPressed 方法被弃用,那么使用什么替代方法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值