Jetpack Navigation 的工作流程涉及多个核心类和复杂的交互,以下是从源码角度对其主要工作流程的分析:
一、初始化阶段
-
NavHostFragment
的创建:- 当在布局文件中使用
<androidx.fragment.app.FragmentContainerView android:name="androidx.navigation.fragment.NavHostFragment"/>
时,系统会实例化NavHostFragment
。这个类是NavHost
的具体实现,它负责管理导航图中的各个片段(Fragment)的显示和切换。 - 在
NavHostFragment
的onCreate
方法中,会初始化一些重要的成员变量,如NavController
和LifecycleOwner
等。
- 当在布局文件中使用
-
NavController
的获取:NavHostFragment
通过findNavController()
方法获取NavController
实例。这个方法会遍历视图层次结构,查找最近的NavControllerProvider
,通常是NavHostFragment
自身。NavController
是导航的核心控制对象,它负责处理导航操作,如导航到特定目的地、返回上一个目的地等。
-
导航图的加载:
NavController
在初始化过程中会加载导航图。导航图通常是一个 XML 文件,定义了应用的导航结构,