Fragment 修订差异说明

1. 原 PDF 内容范围

原 PDF 主要包括:

  • Fragment 为什么被称为“第五大组件”。
  • Fragment 静态加载和动态加载。
  • Fragment 与 ViewPager 搭配。
  • Fragment 生命周期。
  • Fragment 与 Activity、Fragment 与 Fragment 的通信。
  • Fragment 的 add/remove、hide/show、detach/attach 切换方式。

2. 主要修订点

原 PDF 表述 修订后表述 原因
Fragment 可以称为第五大组件 这是民间说法,不是官方四大组件同级概念 Fragment 不能独立存在,必须依附 Activity 或父 Fragment
静态加载使用 <fragment> 标签 推荐 FragmentContainerView <fragment> 可能让 Fragment 生命周期超出 FragmentManager 状态,不是现代推荐写法
FragmentPagerAdapter 页面少、FragmentStatePagerAdapter 页面多 新项目推荐 ViewPager2 + FragmentStateAdapter ViewPager 及旧 Adapter 已被废弃
生命周期中继续强调 onActivityCreated() 改为 onViewCreated() / onCreate() onActivityCreated() 已废弃
Fragment 通信通过 getActivity() 或 Activity 中转 推荐 Shared ViewModel / Fragment Result API 降低耦合,生命周期更安全
replace 不算切换方式,只是 remove + add replace 仍是常见切换方式 它确实接近 remove + add,但仍是实际项目常用 API
detach/attach 后 isAdded() 的表述不确定 删除不确定结论,重点解释 View 销毁与实例保留 原文写了“需要再次确认”,不适合作为结论

3. 补充内容

本次补充了:

  • AndroidX Fragment 与 android.app.Fragment 的区别。
  • Fragment 自身生命周期与 View 生命周期的区别。
  • viewLifecycleOwner 的使用场景。
  • ViewBinding 在 onDestroyView() 置空的原因。
  • Fragment Result API。
  • Shared ViewModel。
  • commit()commitNow()commitAllowingStateLoss() 的区别。
  • Jetpack Navigation 的推荐位置。
  • ViewPager2 + FragmentStateAdapter。

4. 面试版最终结论

Fragment 面试不要只背生命周期顺序,重点要讲出:

  1. Fragment 不是官方第五大组件,它依附宿主存在。
  2. Fragment 有自己的生命周期,但生命周期受宿主和 FragmentManager 共同控制。
  3. Fragment 的 View 生命周期和 Fragment 实例生命周期不同。
  4. onActivityCreated() 已过时,初始化 View 放 onViewCreated()
  5. Fragment 通信优先使用 ViewModel 或 Fragment Result API。
  6. Fragment 切换要根据场景选择:普通跳转用 replace/Navigation,底部 Tab 用 hide/show 或 Navigation 多返回栈。