
谷歌发布了新的 Jetpack Navigation 3 库,彻底重新设计了 Android 应用中的通知处理。新库提供了完整的返回栈控制,并与 Jetpack Compose 的状态管理实现了无缝集成。
Jetpack Navigation 3 的诞生源于这样一个认识:尽管其前身的功能没有任何问题,但“现在构建应用的方式已经发生了根本性的变化”。
具体来说,正如谷歌工程师 Don Turner 所解释的那样,大多数现代应用现在都遵循响应式编程范式。这使得开发人员管理视图栈的方式发生了根本性的变化。举例来说,在 Navigation 3 中,只需向库的 NavDisplay 组件所监视的列表中添加一项,即可导航至新视图。同样,当需要从当前屏幕返回时,只需从列表中移除对应的项。NavDisplay 会根据列表变化自动更新用户界面。
以 Jetpack 状态管理作为 Navigation 3 的基础还有一个很大的好处,使用它可以轻松创建单一数据源。这与开发人员定义的状态一致。相比之下,Navigation 2 保留了自身的内部状态,导致应用状态分散在应用自身表示和 Navigation 2 表示两个地方。
Navigation 3 采用完全模块化的设计,通过独立的 API 实现无缝协作,提供了更高的灵活性和可定制性。这使得开发人员能够针对特定的用例创建复杂的功能,并突破 Navigation 3 为常见导航模式提供的默认行为。有意思的是,这些默认行为正是基于相同的底层 API 实现的。例如,开发人员可以自定义屏幕动画效果,或创建能同时显示多个窗格的灵活布局。
为了实现更大程度的定制,开发人员可以用他们自己的实现替换特定的 Navigation 3 组件。 Android 开源项目(AOSP)中提供了 Navigation 3 的完整代码,这使得替换过程比较简单。
要在应用中使用 Navigation 3,开发人员需要为每个可显示组件关联一个唯一的键,并将该键推入返回栈,让 NavDisplay 观察它的变化,从而自动添加和移除屏幕上的内容。
为了简化开发人员的工作,谷歌已经发布了一个代码库,目前包含 19 个导航方法,未来还会增加,包括多返回栈、导航参数传递、从屏幕返回结果等。
最后,Navigation 3 也可以在 JetBrains 的 Jetpack Compose Multiplatform 上使用。尽管仍处于 Alpha 阶段,但它使非 Android 应用能够利用新发布的导航 API。为了更好地支持纯原生体验,Navigation 3 多平台版本提供了特定于平台的增强功能,如支持 iOS 的边缘滑动手势。
声明:本文为 InfoQ 翻译,未经许可禁止转载。
原文链接:https://www.infoq.com/news/2025/11/android-jetpack-navigation-3/







评论