Fragment生命周期详解

一、Fragment生命周期方法概述


public class ExampleFragment extends Fragment {

    public ExampleFragment() {
        // Required empty public constructor
    }

    // Fragment创建
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // ...
    }

    // Fragment创建视图
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // ...
        return rootView;
    }

    // Fragment添加到Activity
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        // ...
    }

    // Fragment即将显示
    @Override
    public void onStart() {
        super.onStart();
        // ...
    }

    // Fragment可交互
    @Override
    public void onResume() {
        super.onResume();
        // ...
    }

    // Fragment不可交互
    @Override
    public void onPause() {
        super.onPause();
        // ...
    }

    // Fragment不可见
    @Override
    public void onStop() {
        super.onStop();
        // ...
    }

    // Fragment解除与Activity的关联
    @Override
    public void onDetach() {
        super.onDetach();
        // ...
    }

    // Fragment销毁视图
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        // ...
    }

    // Fragment销毁
    @Override
    public void onDestroy() {
        super.onDestroy();
        // ...
    }
}

Fragment是Android开发中常见的一个关键组件,因此学习Fragment的生命周期也就成为了必须掌握的内容之一。在这里,我们将围绕着生命周期方法,在接下来的段落中对Fragment的生命周期进行详细的讲解。

二、Fragment生命周期方法是用来加载

在Fragment的生命周期中,其中被广泛运用的就是onCreateView()方法,这个方法用来加载Fragment的视图,还可以在这个过程中完成一些初始化的工作。

这个方法通常在Fragment创建时调用,具体调用时机为:

1、如果Fragment离线并且它具有UI,则在它被更新为在线并从其视图层次结构中删除时调用onCreateView()。

2、如果Fragment在线并且它具有UI,则在将其视图从其视图层次结构中删除时调用onCreateView()。

三、Fragment生命周期变化

Fragment的生命周期是会发生变化的。当它被创建时,将会经历onAttach()、onCreate()、onCreateView()、onActivityCreated()、onStart()和onResume()等生命周期方法。当Fragment被销毁时,将会经历onPause()、onStop()、onDestroyView()、onDestroy()和onDetach()等生命周期方法。

在这些生命周期方法的调用过程中,Fragment的状态也随之发生变化,如下表所示:

四、Fragment生命周期有哪些

在Android开发者中,常见的对Fragment的生命周期方法的描述通常是这样的:


onCreateView() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()

虽然这个描述可以大致了解Fragment的生命周期,但是其实还有很多细节和变化。常用的生命周期方法及其作用如下所示:

五、Fragment生命周期4种状态

Fragment的生命周期状态一共分为4种,即:

1、Active:Fragment当前处于活跃状态,也就是当前用户正在与Fragment进行交互。

2、Paused:Fragment处于失去焦点的状态。

3、Stopped:Fragment不可见,但是仍然和Activity相关联。

4、Destroyed:Fragment已被销毁,其上下文已被完全销毁,并且它与Activity的链接已断开。

六、Fragment生命周期表

下面是对Fragment生命周期的详细描述:

生命周期方法调用时机作用
onAttach()当Fragment被添加到Activity时Fragment与Activity相关联
onCreate()当Fragment被创建时完成初始化工作
onCreateView()当Fragment首次创建View时加载并返回Fragment的布局
onActivityCreated()当Fragment所依附的Activity完成onCreate()时完成Fragment添加到Activity后的操作,如恢复ABD, 延迟动画等
onStart()当Fragment开始可见时Fragment是可见且已经附加到Activity
onResume()当Fragment可交互时Fragment处于栈顶,用户可以与之交互
onPause()当Fragment失去焦点时Fragment不可见,但是仍然存活
onStop()当Fragment不可见时Fragment未销毁,但是不可见,可能已被回收
onDestroyView()当Fragment的视图被销毁时解除View的引用,避免内存泄漏
onDestroy()当Fragment被销毁时释放资源
onDetach()当Fragment与Activity解除关联时释放所有与Activity相关联的资源

七、Fragment生命周期图

为了更加方便地理解Fragment的生命周期,下面是一张生命周期的图表。

八、Fragment生命周期方法详解

1、onCreate()

在Fragment创建时回调。这个生命周期方法可以完成一些初始化,如创建数据集或者一些文件。

2、onAttach()

当Fragment被附加到Activity时回调。在这个生命周期方法中,我们可以获取与当前Fragment相关联的Activity,通过调用getActivity()方法来实现。


@Override
public void onAttach(Context context) {
    super.onAttach(context);
    //获取到当前 Fragment 所属 activity 的引用
    mActivity = (MainActivity) context;
}

3、onCreateView()

在Fragment首次创建视图时调用。这个方法通常用于初始化Fragment的布局,并返回这个布局的根View。此外,在onCreateView()方法中还可以设置Fragment的显示风格、添加事件监听和初始化一些控件等。


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    // 最好加上root 参数,否则报错
    View root = inflater.inflate(R.layout.fragment_layout, container, false);

    // 初始化布局
    initView(root);

    return root;
}

private void initView(View root) {

}

4、onActivityCreated()

在Activity创建之后,Fragment将触发onActivityCreated()方法。在这个生命周期方法中,Fragment已经关联到Activity,并且Activity的视图层次结构已经完全初始化,所以这里可以扩展Activity的UI等。


@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    // ...
}

5、onStart()

在用户可以看见Fragment时回调。这个生命周期方法表示Fragment可见,已经添加到Activity中,但是可能不在前台。在onStart()方法中我们可以处理Fragment相关的可见性,比如是否显示广告、是否展示一些提示、是否刷新数据等。


@Override
public void onStart() {
    super.onStart();
    // ...
}

6、onResume()

这个生命周期方法表示Fragment正在前台,可以与用户进行交互。在onResume()方法中,我们可以开启或恢复一些服务或线程,从而维护Fragment的UI显示。


@Override
public void onResume() {
    super.onResume();
    // ...
}

7、onPause()

Fragment正在前台并与用户进行交互时,如果发生了一些影响到了页面可见性的事情,比如打开了另一个Activity、弹出了Dialog等,那么onPause()方法将会被调用。在这里,我们可以暂停一些资源的使用,比如MediaPlayer、网络操作等。


@Override
public void onPause() {
    super.onPause();
    // ...
}

8、onStop()

当Fragment不再可见时回调,比如被另一个Fragment覆盖或者当Activity进入后台时。onStop()方法可以用来停止或释放资源,比如停止动画、取消网络访问等。


@Override
public void onStop() {
    super.onStop();
    // ...
}

9、onDestroyView()

当Fragment视图被销毁时回调。在onDestroyView()方法中,我们可以销毁那些与UI相关的资源,如View和Dialog等。但是,Fragment所关联的Activity仍然存在,所以Fragment不能被销毁。


@Override
public void onDestroyView() {
    super.onDestroyView();
    // ...
}

10、onDestroy()

当Fragment将要被销毁时回调。在这个生命周期方法中,我们可以销毁一些资源,比如停止动画、取消网络访问等。此外,如果在onCreateView()方法中创建了非View相关的资源,那么onDestroy()方法中也要进行释放。


@Override
public void onDestroy() {
    super.onDestroy();
    // ...
}

11、onDetach()

当Fragment与Activity解除关联时回调。在这个生命周期方法中,我们可以进行资源释放或者清除操作。例如在onAttach()方法中获取到的Activity的应用需要在onDetach()方法中清除掉。


@Override
public void onDetach() {
    super.onDetach();
    // ...
}

九、Fragment生命周期方法包括

Fragment的生命周期包括Fragment的创建周期、Fragment的可见性和状态周期、Fragment的交互周期及Fragment的系统相关周期。

十、总结

经过这么详

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/295707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-12-27 12:56
下一篇 2024-12-27 12:56

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25

发表回复

登录后才能评论