关于Fragment的生命周期,你知道多少?

Fragment生命周期

Fragment是Android中用于构建用户界面的一种组件。

Fragment具有自己的生命周期,包括以下几个阶段:

  1. onAttach(): 当Fragment与Activity关联时调用,可以通过该方法获取到所关联的Activity的引用。

  2. onCreate(): 在Fragment创建时调用,可以进行一些初始化操作,如设置布局、获取参数等。

  3. onCreateView(): 创建Fragment的用户界面,可以通过该方法返回一个View对象作为Fragment的布局。

  4. onActivityCreated(): 当与Fragment关联的Activity的onCreate()方法执行完毕时调用,可以在该方法中进行与Activity交互的操作。

  5. onStart(): 当Fragment可见时调用,可以在该方法中开始执行一些异步操作或者注册监听器。

  6. onResume(): 当Fragment获取焦点并可与用户交互时调用,可以在该方法中开始更新UI或者注册广播接收器。

  7. onPause(): 当Fragment失去焦点或者被其他Fragment覆盖时调用,可以在该方法中暂停UI更新或者取消注册广播接收器。

  8. onStop(): 当Fragment不再可见时调用,可以在该方法中停止异步操作或者释放资源。

  9. onDestroyView(): 当Fragment的视图被移除时调用,可以在该方法中清理资源或者取消异步操作。

  10. onDestroy(): 当Fragment被销毁时调用,可以在该方法中进行最终的资源释放。

  11. onDetach(): 当Fragment与Activity解除关联时调用,可以在该方法中清理与Activity相关的引用。

以上就是Fragment的生命周期,通过重写这些方法,可以在不同的生命周期阶段执行相应的操作。

Fragment与Activity通信

  1. 使用接口(Interface):在Fragment中定义一个接口,然后在Activity中实现该接口。Fragment可以通过调用接口中的方法来与Activity进行通信。

  2. 使用广播(Broadcast):Fragment可以发送广播,而Activity可以注册广播接收器来接收Fragment发送的广播消息。

  3. 使用回调(Callback):在Fragment中定义一个回调接口,然后在Activity中实现该接口。Fragment可以通过调用回调接口中的方法来与Activity进行通信。

  4. 使用ViewModel:使用Android Architecture Components中的ViewModel来共享数据。Fragment和Activity可以通过观察ViewModel中的LiveData对象来实现通信。

  5. 使用EventBus:EventBus是一个开源的事件总线库,可以用于在Fragment和Activity之间进行事件通信。

以上是常用的几种Fragment与Activity通信方式,开发者可以根据具体需求选择适合的方式进行通信。

Fragment与Activity之间通过接口进行通信示例如下:

  1. 在Fragment中定义一个接口,用于定义通信的方法。例如:

    public interface OnFragmentInteractionListener {
    void onFragmentInteraction(String data);
    }

  2. 在Fragment中创建一个成员变量,用于保存接口的实例。例如:

    private OnFragmentInteractionListener mListener;

  3. 在Fragment的onAttach()方法中,将Activity转换为接口的实例,并赋值给成员变量。例如:

    @Override
    public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof OnFragmentInteractionListener) {
    mListener = (OnFragmentInteractionListener) context;
    } else {
    throw new RuntimeException(context.toString()
    + " must implement OnFragmentInteractionListener");
    }
    }

  4. 在Fragment中需要通信的地方,调用接口的方法。例如:

    mListener.onFragmentInteraction("Hello, Activity!");

  5. 在Activity中实现接口,并重写接口方法。例如:

    public class MainActivity extends AppCompatActivity implements OnFragmentInteractionListener {
    // ...

    复制代码
     @Override
     public void onFragmentInteraction(String data) {
         // 处理来自Fragment的数据
     }

    }

当Fragment需要向Activity传递数据时,调用接口的方法;当Activity需要向Fragment传递数据时,可以通过Fragment的公共方法或者直接访问Fragment的成员变量来实现。

Fragment生命周期的意义

Fragment生命周期的意义在于控制Fragment的创建、销毁和状态变化等过程,以便在不同的阶段执行相应的操作和逻辑。通过重写Fragment生命周期方法,我们可以在不同的生命周期阶段执行相应的操作,例如初始化数据、更新UI、保存状态、释放资源等。这样可以更好地管理Fragment的生命周期,提高应用的性能和用户体验。

注意:在Fragment的生命周期中,onCreateView()onActivityCreated()onStart()onResume()这四个方法是与Activity的生命周期相对应的,可以在这些方法中进行与Activity交互的操作。

Fragment与Activity关联关系

Fragment与Activity是密切关联的。Fragment是一种可以嵌入到Activity中的模块化UI组件,它可以在一个Activity中承载多个Fragment,并且可以在不同的Activity之间共享。

Fragment与Activity之间的关联关系可以通过以下几种方式实现:

  1. 使用FragmentManager将Fragment添加到Activity中。通过调用FragmentManager的方法,如beginTransaction()、add()、replace()等,可以将Fragment添加到Activity的布局中。

  2. 使用FragmentTransaction管理Fragment的生命周期。FragmentTransaction是FragmentManager的一个内部类,它可以用于管理Fragment的添加、移除、替换等操作,以及控制Fragment的生命周期。

  3. 使用Fragment的生命周期回调方法。Fragment具有自己的生命周期回调方法,如onCreate()、onStart()、onResume()等,可以在这些方法中执行与Activity相关的操作。

  4. 使用Fragment与Activity之间的通信机制。Fragment可以通过接口回调、广播、事件总线等方式与Activity进行通信,从而实现二者之间的交互。

Fragment与Activity之间的关联关系是通过FragmentManager和FragmentTransaction进行管理的,同时也可以通过Fragment的生命周期回调方法和通信机制实现二者之间的交互。

Android 学习笔录

Android 性能优化篇:https://qr18.cn/FVlo89
Android Framework底层原理篇:https://qr18.cn/AQpN4J
Android 车载篇:https://qr18.cn/F05ZCM
Android 逆向安全学习笔记:https://qr18.cn/CQ5TcL
Android 音视频篇:https://qr18.cn/Ei3VPD
Jetpack全家桶篇(内含Compose):https://qr18.cn/A0gajp
OkHttp 源码解析笔记:https://qr18.cn/Cw0pBD
Kotlin 篇:https://qr18.cn/CdjtAF
Gradle 篇:https://qr18.cn/DzrmMB
Flutter 篇:https://qr18.cn/DIvKma
Android 八大知识体:https://qr18.cn/CyxarU
Android 核心笔记:https://qr21.cn/CaZQLo
Android 往年面试题锦:https://qr18.cn/CKV8OZ
2023年最新Android 面试题集:https://qr18.cn/CgxrRy
Android 车载开发岗位面试习题:https://qr18.cn/FTlyCJ
音视频面试题锦:https://qr18.cn/AcV6Ap

相关推荐
TeleostNaCl13 分钟前
如何安装 Google 通用的驱动以便使用 ADB 和 Fastboot 调试(Bootloader)设备
android·经验分享·adb·android studio·android-studio·android runtime
fatiaozhang95271 小时前
中国移动浪潮云电脑CD1000-系统全分区备份包-可瑞芯微工具刷机-可救砖
android·网络·电脑·电视盒子·刷机固件·机顶盒刷机
2501_915918412 小时前
iOS 开发全流程实战 基于 uni-app 的 iOS 应用开发、打包、测试与上架流程详解
android·ios·小程序·https·uni-app·iphone·webview
lichong9512 小时前
【混合开发】vue+Android、iPhone、鸿蒙、win、macOS、Linux之dist打包发布在Android工程asserts里
android·vue.js·iphone
Android出海2 小时前
Android 15重磅升级:16KB内存页机制详解与适配指南
android·人工智能·新媒体运营·产品运营·内容运营
一只修仙的猿2 小时前
毕业三年后,我离职了
android·面试
编程乐学3 小时前
安卓非原创--基于Android Studio 实现的新闻App
android·ide·android studio·移动端开发·安卓大作业·新闻app
雅雅姐4 小时前
Android14 init.rc中on boot阶段操作4
android
得物技术4 小时前
前端日志回捞系统的性能优化实践|得物技术
前端·javascript·性能优化
fatiaozhang95274 小时前
中国移动中兴云电脑W132D-RK3528-2+32G-刷机固件包(非原机制作)
android·xml·电脑·电视盒子·刷机固件·机顶盒刷机