• 关于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);
    }
    
    • 1
    • 2
    • 3
    1. 在Fragment中创建一个成员变量,用于保存接口的实例。例如:
    private OnFragmentInteractionListener mListener;
    
    • 1
    1. 在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");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 在Fragment中需要通信的地方,调用接口的方法。例如:
    mListener.onFragmentInteraction("Hello, Activity!");
    
    • 1
    1. 在Activity中实现接口,并重写接口方法。例如:
    public class MainActivity extends AppCompatActivity implements OnFragmentInteractionListener {
        // ...
    
        @Override
        public void onFragmentInteraction(String data) {
            // 处理来自Fragment的数据
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    当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

  • 相关阅读:
    YOLOv6在LabVIEW中的推理部署(含源码)
    CSS 不需要清除浮动的圣杯布局~面试可能会问
    java 身份证号码验证
    TCP/IP五层协议栈(3)
    logstash 编码转换
    StringBuilder常用方法及与String的区别和联系
    vs2019 新建项目显示空白,无法新建文件
    Java开发学习(三十二)----Maven多环境配置切换与跳过测试的三种方式
    【C语言】编译和链接
    备战 清华大学 上机编程考试-冲刺前50%,倒数第5天
  • 原文地址:https://blog.csdn.net/weixin_61845324/article/details/134016515