当前位置: 首页 > news >正文

Android Navigation 架构

一、整体架构概览

Android Navigation 组件是一个层次化、可扩展的导航框架,其核心组件协同工作实现应用导航管理:

二、核心组件详解

1. NavHostFragment - 导航容器

  • 角色:导航的物理容器和起点

  • 职责

    • 提供 Fragment 容器(通常是 FragmentContainerView

    • 创建并持有 NavController 实例

    • 拦截系统返回键事件

    • 实现 NavHost 接口

  • 关键生命周期

    public void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 创建 NavControllermNavController = new NavController(requireContext());mNavController.setLifecycleOwner(this);// 设置导航图if (mGraphId != 0) {mNavController.setGraph(mGraphId);}
    }

2. NavController - 导航控制中心

  • 角色:导航系统的中央协调器

  • 核心职责

    • 管理当前导航状态

    • 处理导航操作(navigate/popBackStack)

    • 维护返回栈(NavBackStack

    • 协调各种 Navigator

  • 关键数据结构

    public class NavController {private NavGraph mGraph; // 当前导航图private final Deque<NavBackStackEntry> mBackStack = new ArrayDeque<>();private final NavigatorProvider mNavigatorProvider;private Context mContext;// ...
    }

3. NavigatorProvider - 导航器工厂

  • 角色Navigator 的注册中心和工厂

  • 职责

    • 注册/注销 Navigator

    • 按类型提供 Navigator 实例

    • 支持自定义 Navigator

  • 核心实现

    public class NavigatorProvider {private final HashMap<String, Navigator<? extends NavDestination>> mNavigators = new HashMap<>();public final <T extends Navigator<?>> T getNavigator(@NonNull Class<T> clazz) {String name = clazz.getSimpleName();Navigator<? extends NavDestination> navigator = mNavigators.get(name);// ...return (T) navigator;}
    }

4. Navigator - 导航执行器

  • 角色:具体导航操作的执行者

  • 职责

    • 处理特定类型目标的导航

    • 实现导航和返回栈操作

    • 管理目标生命周期

  • 类型体系

5. NavGraph - 导航蓝图

  • 角色:导航路线的抽象定义

  • 结构

    public class NavGraph extends NavDestination {private int mStartDestinationId;private final HashMap<Integer, NavDestination> mNodes = new HashMap<>();// ...
    }

  • 关键元素

    • 起始目标(startDestination

    • 目标集合(NavDestination

    • 动作连接(NavAction

6. NavDestination - 导航目标

  • 角色:导航的终点单元

  • 类型

    • FragmentDestination

    • ActivityDestination

    • DialogDestination

    • NavGraph(嵌套图)

  • 关键属性

    public abstract class NavDestination {private int mId;private String mLabel;private Bundle mDefaultArguments;private List<NavAction> mActions = new ArrayList<>();// ...
    }

三、组件协作流程

1. 初始化流程

2. 导航执行流程(navigate())

3. 返回栈管理流程(popBackStack())

四、关键设计解析

1. 责任链模式

  • NavController 作为中央调度器

  • 将具体导航操作委托给专门的 Navigator

  • 符合单一职责原则

2. 抽象工厂模式

  • NavigatorProvider 作为工厂

  • 隐藏具体 Navigator 的创建细节

  • 支持灵活扩展

3. 组合模式

  • NavGraph 包含多个 NavDestination

  • NavDestination 可以是原子目标或嵌套图

  • 实现导航结构的树形组织

4. 状态管理

  • NavBackStack 维护导航状态

  • 每个条目包含:

    public class NavBackStackEntry {private final NavDestination mDestination;private final Bundle mArgs;private final Lifecycle mLifecycle;// ...
    }
  • 完整的生命周期管理

相关文章:

  • 制作投票的网站深圳今日头条新闻
  • 电子商务网站建立无锡营销型网站建设
  • 合肥网站维护网络营销学什么内容
  • 甘肃省城乡与建设厅网站首页免费网站推广工具
  • 网站开发的技术难点友情链接作用
  • 深圳外贸网站制作公司如何模板建站
  • 从虚拟机角度解释python3相对导入问题(下)
  • 创始人IP打造:知识付费领域破局的核心方法论
  • 服务器安装指南
  • PyEcharts教程(008):PyEchart仪表盘
  • PYTHON从入门到实践2-环境配置与字符串打印用法
  • ffmpeg环境配置
  • RDKit:药物化学和分子数据处理的强大工具库
  • 左神算法之单辅助栈排序算法
  • OGG双活集群,年故障时间=0分钟!
  • OSS安全合规实战:金融行业敏感数据加密+KMS自动轮转策略(满足等保2.0三级要求)
  • 跟着chrome面板优化页面性能
  • 第五课:大白话教你用K邻近算法做分类和回归
  • SnowConvert:自动化数据迁移的技术解析与最佳实践
  • QT网络调试助手开发全指南,软件设计图预研,后续文档跟进补充
  • 数智时代如何构建人才培养生态?生成式人工智能(GAI)认证,引领数智时代人才培养新方向
  • Rocky8使用gvm配置Go多版本管理的微服务开发环境
  • 基于Qt C++的影像重采样批处理工具设计与实现
  • 区块链技术未来的发展趋势
  • 梳理React中的fiber架构
  • 点播视频预览是怎么做到的?