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

发表回复

登录后才能评论