Navigation 2 还是 Navigation 3 · AndroidX 源码指南
AAndroidX 源码指南
Navigation
应用导航 · androidx.navigation

Navigation 2 还是 Navigation 32.10.0-beta01

按成熟度、所有权和布局需求选择,而不是按数字大小替换。

最后更新 2026-08-01

对比

判断点Navigation 2Navigation 3
当前源码版本2.10.0-beta011.2.0-alpha07
栈所有权NavController 内部管理应用直接持有 NavBackStack
内容映射graph/destinationkey → NavEntry
多 pane通过自适应导航等上层组合Scene/strategy 是核心扩展点
现有生态Fragment、Compose、Safe Args、UI 集成完整Compose-first,API 仍在 alpha 演进

选择建议

场景选择
已有稳定 Nav2 应用继续用 Nav2——不要仅因版本号重写
新 Compose 应用、传统栈式导航Nav2(成熟稳定)
需要直接控制 back stackNav3(backStack.add/removeAt
多 pane / 大屏自适应布局评估 Nav3(scene strategy 是扩展点)
需要 Fragment / Safe ArgsNav2(生态完整)

迁移原则

  1. 单个 feature 的导航状态只有一个 owner——要么 NavController,要么 NavBackStack,不要混。
  2. 在边界通过回调交接:子页面不直接操作父的栈,用 onBack/onNavigate 回调。
  3. 不要让两套框架互相镜像每一步 back stack——那会让状态失去单一事实源。

什么时候该用 Nav3

  • 底部导航 + 每 tab 独立栈(backStack 是普通 list,天然适合 tab 切换)
  • 多窗口/大屏:同一导航状态渲染成不同布局
  • 自定义过渡/动画策略(NavDisplay 的显示策略是扩展点)

常见陷阱

  • 为版本号重写:已有稳定 Nav2 应用不要仅因版本号迁移。
  • 两套框架互相镜像:不要让 NavController 和 NavBackStack 同步每一步——状态失去单一事实源。
  • 子页面直接操作父栈:用 onBack/onNavigate 回调交接,不直接操作父的 back stack。
  • alpha 当生产:Nav3 1.2.0-alpha07,API 仍在演进,评估后再采用。

要点

  • Nav2 成熟稳定、生态完整;Nav3 灵活但 alpha。
  • 已有应用不必为版本号重写;新项目按需求评估。
  • 单一导航 owner + 回调交接是迁移正确姿势。

相关页面