Fragment添加与状态变更时序图
sequenceDiagram
participant Activity
participant FragmentManager
participant FragmentTransaction
participant FragmentStateManager
participant Fragment
Note over Activity,Fragment: Fragment添加阶段
Activity->>FragmentManager: getSupportFragmentManager()
FragmentManager-->>Activity: return FragmentManager实例
Activity->>FragmentManager: beginTransaction()
FragmentManager->>FragmentTransaction: 创建FragmentTransaction
FragmentTransaction-->>Activity: return FragmentTransaction
Activity->>FragmentTransaction: add(containerId, fragment)
FragmentTransaction->>FragmentTransaction: 记录Op操作
Activity->>FragmentTransaction: commit()
FragmentTransaction->>FragmentManager: 提交事务
Note over FragmentManager,Fragment: Fragment状态管理阶段
FragmentManager->>FragmentManager: executeOps()
FragmentManager->>FragmentStateManager: 创建FragmentStateManager(fragment)
FragmentManager->>FragmentStateManager: addFragment()
FragmentStateManager->>FragmentStateManager: computeExpectedState()
Note over FragmentStateManager,Fragment: 状态变更: INITIALIZING -> ATTACHED
FragmentStateManager->>Fragment: onAttach(context)
Fragment-->>FragmentStateManager: 完成attach
FragmentStateManager->>Activity: onAttachFragment(fragment)
Note over FragmentStateManager,Fragment: 状态变更: ATTACHED -> CREATED
FragmentStateManager->>Fragment: onCreate(savedInstanceState)
Fragment-->>FragmentStateManager: 完成create
Note over FragmentStateManager,Fragment: 状态变更: CREATED -> VIEW_CREATED
FragmentStateManager->>Fragment: onCreateView(inflater, container, savedInstanceState)
Fragment-->>FragmentStateManager: return View
FragmentStateManager->>Fragment: onViewCreated(view, savedInstanceState)
Note over FragmentStateManager,Fragment: 状态变更: VIEW_CREATED -> ACTIVITY_CREATED
FragmentStateManager->>Fragment: onActivityCreated(savedInstanceState)
Fragment-->>FragmentStateManager: 完成activityCreated
Note over FragmentStateManager,Fragment: 状态变更: ACTIVITY_CREATED -> STARTED
FragmentStateManager->>Fragment: onStart()
Fragment-->>FragmentStateManager: 完成start
Note over FragmentStateManager,Fragment: 状态变更: STARTED -> RESUMED
FragmentStateManager->>Fragment: onResume()
Fragment-->>FragmentStateManager: 完成resume
FragmentStateManager->>FragmentManager: 更新Fragment状态
FragmentManager->>Activity: Fragment已就绪
Note over Activity,Fragment: Fragment完全显示,处于RESUMED状态
Note over Activity,Fragment: ========== Activity生命周期驱动Fragment状态变更 ==========
Note over Activity,Fragment: 场景1: Activity暂停(如锁屏、跳转到其他Activity)
Activity->>Activity: onPause()
Activity->>FragmentManager: dispatchPause()
FragmentManager->>FragmentStateManager: moveToState(STARTED)
Note over FragmentStateManager,Fragment: 状态变更: RESUMED -> STARTED
FragmentStateManager->>Fragment: onPause()
Fragment-->>FragmentStateManager: 完成pause
FragmentStateManager->>FragmentManager: 状态已更新
Note over Activity,Fragment: 场景2: Activity停止(完全不可见)
Activity->>Activity: onStop()
Activity->>FragmentManager: dispatchStop()
FragmentManager->>FragmentStateManager: moveToState(ACTIVITY_CREATED)
Note over FragmentStateManager,Fragment: 状态变更: STARTED -> ACTIVITY_CREATED
FragmentStateManager->>Fragment: onStop()
Fragment-->>FragmentStateManager: 完成stop
FragmentStateManager->>FragmentManager: 状态已更新
Note over Activity,Fragment: 场景3: Activity销毁
Activity->>Activity: onDestroy()
Activity->>FragmentManager: dispatchDestroy()
FragmentManager->>FragmentStateManager: moveToState(INITIALIZING)
Note over FragmentStateManager,Fragment: 状态变更: ACTIVITY_CREATED -> VIEW_CREATED
FragmentStateManager->>Fragment: onDestroyView()
Fragment-->>FragmentStateManager: 完成destroyView
Note over FragmentStateManager,Fragment: 状态变更: VIEW_CREATED -> CREATED
FragmentStateManager->>Fragment: onDestroy()
Fragment-->>FragmentStateManager: 完成destroy
Note over FragmentStateManager,Fragment: 状态变更: CREATED -> ATTACHED
FragmentStateManager->>Fragment: onDetach()
Fragment-->>FragmentStateManager: 完成detach
FragmentStateManager->>FragmentManager: Fragment已销毁
FragmentManager->>FragmentManager: 移除Fragment引用
Note over Activity,Fragment: 场景4: Activity重新启动(从后台返回)
Activity->>Activity: onRestart()
Activity->>Activity: onStart()
Activity->>FragmentManager: dispatchStart()
FragmentManager->>FragmentStateManager: moveToState(STARTED)
Note over FragmentStateManager,Fragment: 状态变更: ACTIVITY_CREATED -> STARTED
FragmentStateManager->>Fragment: onStart()
Fragment-->>FragmentStateManager: 完成start
Activity->>Activity: onResume()
Activity->>FragmentManager: dispatchResume()
FragmentManager->>FragmentStateManager: moveToState(RESUMED)
Note over FragmentStateManager,Fragment: 状态变更: STARTED -> RESUMED
FragmentStateManager->>Fragment: onResume()
Fragment-->>FragmentStateManager: 完成resume
FragmentStateManager->>FragmentManager: 状态已更新
Note over Activity,Fragment: Fragment再次完全显示,处于RESUMED状态
Note over Activity,Fragment: 场景5: 配置变更(如屏幕旋转)
Activity->>Activity: onSaveInstanceState()
Activity->>FragmentManager: dispatchSaveInstanceState()
FragmentManager->>FragmentStateManager: saveState()
FragmentStateManager->>Fragment: onSaveInstanceState(outState)
Fragment-->>FragmentStateManager: 保存状态数据
Note over Activity,Fragment: Activity销毁并重建
Activity->>FragmentManager: dispatchDestroy()
Note over FragmentManager,Fragment: Fragment执行销毁流程(同场景3)
Activity->>Activity: 新Activity onCreate()
Activity->>FragmentManager: 恢复FragmentManager状态
FragmentManager->>FragmentStateManager: 重建Fragment
FragmentStateManager->>Fragment: onCreate(savedInstanceState)
Note over FragmentManager,Fragment: Fragment重新执行创建流程(同初始添加阶段)
说明
主要流程
-
事务创建阶段
- Activity通过FragmentManager获取FragmentTransaction
- 调用add()方法记录添加操作
- 调用commit()提交事务
-
状态管理阶段
- FragmentManager创建FragmentStateManager来管理Fragment状态
- FragmentStateManager负责驱动Fragment的生命周期状态变更
-
生命周期状态变更(向上)
- INITIALIZING → ATTACHED:调用onAttach()
- ATTACHED → CREATED:调用onCreate()
- CREATED → VIEW_CREATED:调用onCreateView()和onViewCreated()
- VIEW_CREATED → ACTIVITY_CREATED:调用onActivityCreated()
- ACTIVITY_CREATED → STARTED:调用onStart()
- STARTED → RESUMED:调用onResume()
-
Activity驱动Fragment状态变更
- 暂停场景:Activity.onPause() → FragmentManager.dispatchPause() → Fragment.onPause()
- 停止场景:Activity.onStop() → FragmentManager.dispatchStop() → Fragment.onStop()
- 销毁场景:Activity.onDestroy() → FragmentManager.dispatchDestroy() → Fragment依次执行onDestroyView()、onDestroy()、onDetach()
- 恢复场景:Activity重启时,通过dispatchStart()和dispatchResume()驱动Fragment恢复到RESUMED状态
- 配置变更:Activity在销毁前保存Fragment状态,重建后恢复Fragment
-
Fragment状态与Activity生命周期的对应关系
- Activity RESUMED → Fragment RESUMED
- Activity STARTED → Fragment STARTED
- Activity CREATED → Fragment ACTIVITY_CREATED
- Activity DESTROYED → Fragment INITIALIZING
关键类职责
- Activity:宿主容器,生命周期变化时通过FragmentManager分发事件驱动Fragment状态同步变更
- FragmentManager:管理Fragment集合,接收Activity生命周期事件并协调Fragment状态转换
- FragmentTransaction:记录Fragment操作,提交事务
- FragmentStateManager:管理单个Fragment的状态变更,调用moveToState()执行状态转换
- Fragment:UI组件,响应生命周期回调
状态转换关键点
- Fragment的状态始终不会超过其宿主Activity的状态
- FragmentManager通过dispatch系列方法(dispatchPause/Stop/Destroy/Start/Resume)同步Activity生命周期到Fragment
- FragmentStateManager根据目标状态计算需要执行的生命周期方法序列
- 配置变更时,Fragment状态会被保存并在Activity重建后恢复