Compose Navigation 时序图


一、点击跳转(navigate)

复制代码
┌──────────┐
│   User   │
└────┬─────┘
     │ 点击
     ▼
┌────────────────────┐
│   Composable(UI)   │
│ onClick {          │
│  navController     │
│   .navigate(route) │
│ }                  │
└────┬───────────────┘
     │
     ▼
┌────────────────────┐
│   NavController    │
│────────────────────│
│ 1. 查 NavGraph     │
│ 2. route 匹配      │
│ 3. 参数解析        │
└────┬───────────────┘
     │
     ▼
┌──────────────────────────────┐
│ NavBackStackEntry (NEW)      │
│──────────────────────────────│
│ - route                      │
│ - arguments                  │
│ - SavedStateHandle           │
│ - ViewModelStore             │
└────┬─────────────────────────┘
     │
     ▼
┌──────────────────────────────┐
│ Composable Destination       │
│ (DetailScreen)               │
│                              │
│ remember(...)                │
│ viewModel()  ← 绑定 Entry    │
└──────────────────────────────┘

二、返回(popBackStack)

复制代码
┌────────────────────┐
│   Composable(UI)   │
│ navController      │
│  .popBackStack()   │
└────┬───────────────┘
     │
     ▼
┌────────────────────┐
│   NavController    │
│────────────────────│
│ 移除当前 Entry     │
└────┬───────────────┘
     │
     ▼
┌──────────────────────────────┐
│ NavBackStackEntry (PREVIOUS) │
│──────────────────────────────│
│ - ViewModel 仍然存在         │
│ - State 仍然存在             │
└────┬─────────────────────────┘
     │
     ▼
┌──────────────────────────────┐
│ Composable 重组              │
│ UI 状态恢复                  │
└──────────────────────────────┘

三、配置变化 / 进程被杀 & 恢复(必懂)

复制代码
┌────────────────────┐
│ Process Kill /     │
│ Configuration      │
└────┬───────────────┘
     │
     ▼
┌──────────────────────────────┐
│ SavedStateRegistry           │
│──────────────────────────────│
│ 保存 NavBackStackEntry       │
│ 保存 route + arguments       │
└────┬─────────────────────────┘
     │
     ▼
┌────────────────────┐
│ 重建 NavHost       │
│ 重建 NavGraph      │
└────┬───────────────┘
     │
     ▼
┌──────────────────────────────┐
│ 恢复 NavBackStackEntry       │
│──────────────────────────────│
│ SavedStateHandle 注入 VM     │
└────┬─────────────────────────┘
     │
     ▼
┌──────────────────────────────┐
│ Composable 重组              │
│ UI 正常显示                  │
└──────────────────────────────┘

四、这张图你一定要记住的 5 个点(重点)

❌ 不是 Composable

✅ 每一个 Entry = 一个 VM 作用域


navigate 只是 创建一个新的 Entry


3️⃣ popBackStack ≠ 重建页面

恢复旧 Entry


4️⃣ State 会自动恢复,但事件不会

所以导航必须用 一次性事件


5️⃣ route 是唯一可恢复的导航信息

不要依赖全局变量 / 单例传参


五、一句话工程总结(你可以直接贴到笔记里)

复制代码
navigate()
  → NavController
    → NavBackStackEntry
      → ViewModel / SavedStateHandle
        → Composable

搞清楚 Entry,一切导航问题都能解释清楚


相关推荐
stevenzqzq2 天前
Android Navigation 组件页面跳转方法说明
android·compose
zh_xuan6 天前
Android compose 可见性动画未执行问题修复
android·compose
hnlgzb7 天前
请详细解释一下MVVM这个设计模型
android·kotlin·android jetpack·compose
hnlgzb9 天前
目前编写安卓app的话有哪几种设计模式?
android·设计模式·kotlin·android jetpack·compose
zh_xuan12 天前
Android compose Navigation 页面导航
android·compose
stevenzqzq15 天前
Kotlin 进阶指南:中缀函数 (Infix Function)
android·kotlin·compose
zh_xuan19 天前
Android compose 自定义主题
android·compose
zh_xuan19 天前
Android compose 使用viewModel
android·compose
stevenzqzq20 天前
MVI架构3--实战示例:我的收藏页面
设计规范·compose·mvi架构
zh_xuan20 天前
Android compose测试数据双向绑定
android·compose