关于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

相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo2 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077002 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
liangshanbo12152 天前
React 性能优化实战
性能优化·react
AFinalStone2 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen2 天前
属性动画原理与高级动画实现
android·kotlin·canvas