Fragment生命周期

Fragment 的生命周期与 Activity 的生命周期相似,但具有自己独特的生命周期回调方法。理解 Fragment 的生命周期对于有效地管理 Fragment 的状态和资源非常重要。以下是 Fragment 的生命周期状态及其对应的回调方法:

Fragment 生命周期状态

  1. onAttach(Context context)

    • 调用时机:Fragment 被添加到 Activity 时调用。

    • 用途:在此方法中可以获取到与 Fragment 关联的 Activity 的引用。

    • 示例

      @Override
      public void onAttach(@NonNull Context context) {
          super.onAttach(context);
          // 与 Activity 进行交互
      }
  2. onCreate(Bundle savedInstanceState)

    • 调用时机:Fragment 被创建时调用。

    • 用途:进行一次性初始化,例如加载配置或数据。

    • 示例

      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          // 初始化代码
      }
  3. onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

    • 调用时机:创建 Fragment 的 UI 视图时调用。

    • 用途:返回一个 View 对象作为 Fragment 的界面,通常会使用布局文件。

    • 示例

      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
          return inflater.inflate(R.layout.fragment_layout, container, false);
      }
  4. onViewCreated(View view, Bundle savedInstanceState)

    • 调用时机:在 onCreateView() 之后调用。

    • 用途:此时可以对 Fragment 的视图进行初始化操作,如设置监听器。

    • 示例

      @Override
      public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
          super.onViewCreated(view, savedInstanceState);
          // 初始化视图组件
      }
  5. onActivityCreated(Bundle savedInstanceState)

    • 调用时机:当 Fragment 所在的 Activity 的 onCreate() 方法执行完毕时调用。

    • 用途:此时可以访问 Activity 的 UI 组件,适合进行最后的初始化。

    • 示例

      @Override
      public void onActivityCreated(Bundle savedInstanceState) {
          super.onActivityCreated(savedInstanceState);
          // 访问 Activity 的 UI 组件
      }
  6. onStart()

    • 调用时机:Fragment 即将变为可见时调用。

    • 用途:在此方法中执行需要在 Fragment 可见时进行的操作。

    • 示例

      @Override
      public void onStart() {
          super.onStart();
          // 注册监听器或更新 UI
      }
  7. onResume()

    • 调用时机:Fragment 准备与用户交互时调用。

    • 用途:此时可以开始播放动画或音乐等。

    • 示例

      @Override
      public void onResume() {
          super.onResume();
          // 恢复活动或获取用户输入
      }
  8. onPause()

    • 调用时机:当另一个 Fragment 或 Activity 进入前台时调用。

    • 用途:在此方法中暂停动画或保存数据。

    • 示例

      @Override
      public void onPause() {
          super.onPause();
          // 暂停活动
      }
  9. onStop()

    • 调用时机:Fragment 不再可见时调用。

    • 用途:在此方法中进行较长时间的资源释放或保存应用状态。

    • 示例

      @Override
      public void onStop() {
          super.onStop();
          // 保存数据或释放资源
      }
  10. onDestroyView()

    • 调用时机:Fragment 的视图被销毁时调用。

    • 用途:可以在此处清理视图相关的资源。

    • 示例

      @Override
      public void onDestroyView() {
          super.onDestroyView();
          // 清理视图资源
      }
  11. onDestroy()

    • 调用时机:Fragment 即将被销毁时调用。

    • 用途:在此方法中清理 Fragment 的资源。

    • 示例

      @Override
      public void onDestroy() {
          super.onDestroy();
          // 清理资源
      }
  12. onDetach()

    • 调用时机:Fragment 与 Activity 分离时调用。

    • 用途:可以在此方法中执行一些最后的清理工作。

    • 示例

      @Override
      public void onDetach() {
          super.onDetach();
          // 与 Activity 的交互结束
      }

生命周期总结

  • 创建阶段onAttach()onCreate()onCreateView()onViewCreated()onActivityCreated()

  • 运行阶段:用户与 Fragment 交互时。

  • 暂停阶段onPause()onStop()

  • 销毁阶段onDestroyView()onDestroy()onDetach()

小结

理解 Fragment 的生命周期是构建高效、稳定的 Android 应用的重要组成部分。通过重写合适的生命周期回调方法,可以在不同的状态下执行相应的操作,从而有效管理 Fragment 的状态和资源。

Last updated