Android Fragment 生命周期及回调方法

发布于:2021-10-16 19:16:11

Android Fragment 生命周期及回调方法

1.概述
基本概念:Fragment,简称碎片,片元。是Android 3.0(API 11)提出的,为了兼容低版本,support-v4库中也开发了一套Fragment API,最低兼容Android 1.6。
support-v4库原本是一个jar包,24.2.0版本开始,将support-v4库模块化为多个jar包,包含:support-fragment, support-ui, support-media-compat等,这么做是为了减少APK包大小,方便用户需要用哪个模块就引入哪个模块。
例如:想引入整个support-v4库,则compile ‘com.android.support:support-v4:24.2.1’,如果只想引入support-fragment库,则com.android.support:support-fragment:24.2.1。


使用:
建议使用support库中的android.support.v4.app.Fragment,而不要用系统自带的android.app.Fragment(因为support库是不断更新的)。 如果要使用support库的Fragment,Activity必须要继承FragmentActivity(AppCompatActivity是FragmentActivity的子类)。


特点:
?Fragment依赖于Activity的,不能独立存在。
?一个Activity里可以有多个Fragment。
?一个Fragment可以被多个Activity重用。
?Fragment有自己的生命周期,并能接收输入事件。
?用户可以在Activity运行时动态地添加或删除Fragment。


优势:
?模块化(Modularity):用户不必把所有代码全部写在Activity中,而是写在各自的Fragment中。
?可重用(Reusability):多个Activity可以重用一个Fragment。
?可适配(Adaptability):根据硬件的屏幕尺寸、屏幕方向,能够方便地实现不同的布局,用户体验更好。


2.Fragment 生命周期详解
2.1Fragment 生命周期

Fragment 生命周期框图:

步骤详解:
?onAttach():Fragment和Activity相关联时调用。可以通过该方法获取Activity引用,还可以通过getArguments()获取参数。
?onCreate():系统创建Fragment时调用,作用:实例化一些变量,例如用户暂停、停止的时候想要保持的数据。
?onCreateView():创建Fragment的布局(视图)。
(第一次使用的时候fragment会在这上面画一个layout,为了画出该layout需要返回一个布局的view,也可以返回null,表示什么都不显示。当系统要用到fragment的时候,fragment就要返回他的view,此时应该越快越好,因此尽量不要在这里做耗时操作,比如从数据库加载大量数据。)
?onActivityCreated():当Activity中的onCreate()方法执行完后调用。
当fragment执行到onActivityCreated()的时候,activity的onCreate()才刚执行完成。因此,在onActivityCreate()调用之前,activity的onCreate()可能还没有完成,因此不能在onCreateView()中进行与activity有交互的UI操作,UI交互操作可以在onActivityCreated()里面运行。即这个方法主要是初始化那些需要父Activity/Fragment的UI已经被完整初始化才能初始化的元素。
?onStart():启动Fragment时调用,此时Fragment可见。
?onResume():当Fragment可见且可交互时调用。
?onPause():当Fragment不可交互但可见时调用。
?onStop():当Fragment不可见时调用。可能情况:activity被stopped或fragment被移除,加入到回退栈。一个stopped的fragment任然是活着的,如果长时间不用也会被移除。
?onDestroyView():当Fragment的UI从视图结构中移除时调用。Fragment中的布局被移除时调用,表示fragment销毁相关联的UI布局,清除所有与视图相关的资源。(这一步骤只是移除视图,并没有销毁且没有脱离activity)
?onDestroy():销毁Fragment时调用。
?onDetach():当Fragment和Activity解除关联时调用。(fragment脱离activity)
注意:上面的方法中,只有onCreateView()在重写时不用写super方法,其他都需要。


2.2Fragment 依赖于 Activity
Fragment 是依赖 Activity 的,fragment 和 activity 启动和销毁时生命周期中各个方法的关系理解:
fragment 和 activity 生命周期中各个方法的关系和顺序图:

1、 Fragment的启动(Activity 在Paused之前状态)
分两种情况来说明:
?第一种:在Activity的启动过程中,我们在activity的生命周期中添加了的Fragment会随着fragment生命周期图走,并且会追赶上Activity的生命周期,假如我们在Activity的onStart方法中添加了Fragment,那么我们的Fragment会自动调用onStart之前的生命周期方法。
?第二种:在Activity启动完成以后调用 fragment,其实还是跟上面的理解一样,我们当前Activity 执行过onResume方法了,所以我们在使用Fragment的时候,fragment会自动的调用onPause之前的生命周期的方法。


2、Fragment的销毁 (Activity 的Paused之后的状态)
Activity自己销毁的过程中所有的Fragment会跟随Activity调用,处于显示中的fragment的生命周期是紧紧追随它的宿主Activity的。

相关推荐

最新更新

猜你喜欢