Android14新特性之预测返回手势
简介
Android 14引入了对预测性返回手势的支持,这意味着开发者可以通过系统提供的额外动画和API来实现定制化的动画效果。这一更新使得应用程序可以在用户执行返回手势时展示一个动画预览,例如在应用程序前显示Home屏幕的动画效果。为了支持预测性返回手势,开发者需要更新他们的应用程序,并使用向后兼容的OnBackPressedCallback
AppCompat 1.6.0-alpha05(AndroidX)或更高版本的API,或者使用新的OnBackInvokedCallback
平台API。这个更新为应用程序提供了迁移路径,以便正确拦截返回导航,其中包括使用新的系统返回API替换旧的方法。虽然在Android 13中,预测性返回手势对用户不可见,但作为开发者选项提供了一个早期版本的用户界面供测试。另外,虽然KeyEvent.KEYCODE_BACK
并没有被弃用,但是不再支持从KeyEvent.KEYCODE_BACK
拦截返回事件,开发者应当注意这一点并做出相应的调整。这些更新的目的是为了增强用户体验,为开发者提供更多定制动画的可能性,并确保应用程序能够跟上最新的系统功能。
更新app以支持默认返回导航
在更新应用程序以支持默认返回导航时,如果应用程序没有实现任何自定义的后退行为,即依赖系统处理后退操作,那么更新过程非常简单直接。只需要按照指南中提供的步骤选择启用此功能即可。另外,如果应用程序中使用了Fragments或Navigation组件,还需要将AndroidX Activity升级至1.6.0-alpha05或更高版本以确保兼容性。
更新app支持自定义返回导航
而对于已经实现了自定义后退行为的应用程序,更新则需要考虑不同的迁移路径。这取决于应用程序是否使用了AndroidX以及如何处理后退导航。针对这种情况,开发者需要仔细评估现有的自定义后退行为,并根据具体情况选择合适的迁移方式,以确保应用程序能够顺利适配新的系统功能并保持稳定性。通过清晰的迁移计划和适当的更新步骤,开发者可以有效地将应用程序升级到支持最新特性的版本,提升用户体验并保持应用的竞争力。
迁移 AndroidX 的后退导航实现是一种常见且推荐的做法。这适用于已经使用 OnBackPressedDispatcher
进行自定义手势导航处理的新应用程序或现有应用程序。如果您的应用符合这一情况,请按照以下步骤添加对预测性后退手势的支持:
- 确保已经使用了
OnBackPressedDispatcher
API(例如 Fragments 和 Navigation Component)的 API 与预测性后退手势无缝配合工作,需将其升级到AndroidX Activity 1.6.0-alpha05
。
// 在您的 build.gradle 文件中:
dependencies {
// 除其他依赖项外添加以下依赖
implementation "androidx.activity:activity:1.6.0-alpha05"
}
-
将包含不受支持的后退导航 API 的 AndroidX 应用迁移到 AndroidX API。如果您的应用使用了 AndroidX 库,但实现或引用了不支持的后退导航 API,则需要迁移到使用 AndroidX API 以支持新行为。
-
将不受支持的 API 迁移到 AndroidX API,具体步骤如下:
- 将系统后退处理逻辑迁移到 AndroidX 的
OnBackPressedDispatcher
,并使用OnBackPressedCallback
进行实现。有关详细指导,请参见“提供自定义后退导航”。 - 当准备好停止拦截后退手势时,禁用
OnBackPressedCallback
,通过OnBackPressed
或KeyEvent.KEYCODE_BACK
停止拦截后退事件。 - 确保升级到
AndroidX Activity 1.6.0-alpha05
。
- 将系统后退处理逻辑迁移到 AndroidX 的
-
成功迁移应用程序后,可以选择加入预测性后退手势,以查看返回主屏幕的系统动画。
-
如果您的应用程序无法使用 AndroidX 库,并且改为使用不受支持的 API 实现或引用自定义后退导航,则必须迁移到
OnBackInvokedCallback
平台 API。在运行 Android 13 或更高版本的设备上使用新的OnBackInvokedCallback
API,并依靠不受支持的 API 在运行 Android 12 或更低版本的设备上。 -
最后,对于 Android 13 及以上的设备,请通过
OnBackPressed
或KeyEvent.KEYCODE_BACK
停止拦截后退事件。
总之,迁移到 AndroidX 应用程序并支持更新的系统后退导航是一种推荐的做法,同时也将使您的应用能够使用许多其他有用的功能,每个版本都会自动更新 API,以节省您的工作和时间。
选择启用预测性返回手势
一旦您确定如何根据您的情况更新您的应用程序,就可以选择支持预测性返回手势。
要选择启用预测性返回手势,在 AndroidManifest.xml
文件中的 <application>
标签中将 android:enableOnBackInvokedCallback
标志设置为 true。
<application
...
android:enableOnBackInvokedCallback="true"
... >
...
</application>
如果您不提供值,它将默认为 false 并执行以下操作:
禁用预测性返回手势系统动画。
忽略 OnBackInvokedCallback
,但 OnBackPressedCallback
的调用仍将继续工作。
在Activity级别选择启用
从 Android 14 开始,android:enableOnBackInvokedCallback
标志使您可以选择在活动级别启用预测性系统动画。这种行为使得更容易将大型多活动应用程序迁移到预测性返回手势。
以下代码展示了如何使用 enableOnBackInvokedCallback
在 MainActivity
中启用返回主屏幕系统动画:
<manifest ...>
<application . . .
android:enableOnBackInvokedCallback="false">
<activity
android:name=".MainActivity"
android:enableOnBackInvokedCallback="true"
...
</activity>
<activity
android:name=".SecondActivity"
android:enableOnBackInvokedCallback="false"
...
</activity>
</application>
</manifest>
在使用 android:enableOnBackInvokedCallback
标志时,请注意以下事项:
将 android:enableOnBackInvokedCallback=false
设置为在活动级别或应用程序级别关闭预测性返回动画,并指示系统忽略对 OnBackInvokedCallback
平台 API 的调用。但是,由于 OnBackPressedCallback
是向后兼容的并调用了不受支持的 onBackPressed
API(在 Android 13 之前),因此 OnBackPressedCallback
的调用仍将继续运行。
在应用程序级别设置 enableOnBackInvokedCallback
标志会为应用程序中的所有活动建立默认值。您可以通过在活动级别设置标志来覆盖默认值,如上面的代码示例所示。
Callback的最佳实践
Callback的最佳实践包括以下几点:使用支持的系统回调(如 Compose 的 BackHandler
、OnBackPressedCallback
或 OnBackInvokedCallback
)、确定启用和禁用每个回调的 UI 状态、将系统回调用于 UI 逻辑、创建单一职责的回调以及测试预测性后退手势动画。
在确定每个回调的 UI 状态时,建议使用可观察的数据持有类型(如 StateFlow 或 Compose State)定义该状态,并随着状态的变化启用或禁用回调。这种做法能够避免将后退逻辑与条件语句关联起来,从而避免在后退事件发生后才对其进行反应。
使用系统回调来运行 UI 逻辑,例如显示弹出窗口或运行动画。请勿仅创建回调以运行非 UI 逻辑。如果您只需要拦截后退事件以进行日志记录,请在 Activity 或 Fragment 生命周期内进行日志记录。
创建单一职责的回调可以让您将多个回调添加到调度程序中,并将每个回调与一个后退手势相关联。这样可以简化代码逻辑并提高代码质量。
最后,要注意测试预测性后退手势动画。在 Android 13 的最终版本中,您可以启用开发者选项来测试返回主屏幕动画。这样可以确保应用程序的用户体验得到最优化。