Android-->Fragment生命周期详解(上)

本文深入探讨了Android中Fragment的生命周期,包括各个状态转换及其在Activity中的交互,帮助开发者更好地理解和管理Fragment。
摘要由CSDN通过智能技术生成
  1.  理解Fragment的生命周期
    我们开发Android应用程序的挑战之一是确保应用程序能成功地处理Activity的生命周期。在应用程序的生命周期中,一个给定的activity可能被创建、销毁和重新创建多次。比如用户旋转屏幕,会引起可见的activity被完全销毁,并且系统会使用合适的资源重新创建一个的activity。应用程序如果不能有效地处理好Activity生命周期会导致程序经常Crash或其他不愿看见的错误。
    每个Fragment实例存在于单独的一个activity中,因此Fragment必须以某种方式与Activity的生命周期合作。Fragment不仅与Activity的生命周期合作,而且他们之间有“密切”联系。
    在Fragment的建立和显示阶段以及隐藏和销毁阶段,Fragment提供了类似于Activity生命周期的回调函数,此外Fragment额外提供了与activity有关系的回调方法。
      1.1  理解Fragment的建立和显示
    Fragment的建立和显示是一个需要fragment与activity协作的多相过程,包括fragment的创建、以及将activity置于运行态的一系列标准生命周期事件。为了高效地使用fragment,了解其生命周期事件的行为与其相关的回调方法是非常重要的。一旦我们了解了其生命周期事件和回调方法,我们就能明白生命周期事件的回调方法是怎样使用的。
    下图是Fragment的创建和显示的过程

    在大多数情况下,建立和显示fragment发生在activity的onCreate方法中。多数情况下,当在activity的onCreate回调方法中调用了setContentView方法,接着当加载布局资源后会触发activity与其包含fragment的关联。
    当fragment创建之前,fragment会附着(attach)到activity。首先,通过调用fragment的onAttach回调方法,fragment会接收到一个activity的引用,并附属于activity。接着activity通过其onAttachFragment回调方法,activity会接收到fragment的一个引用。
    虽然在fragment创建之前将其附属于activity的做法有点出乎意料,但是这样做是非常有用的。在很多情况下,fragment在其创建过程中需要访问activity,因为activity经常包含fragment显示所需要的信息或者其他重要信息。
    当fragment附属到activity后,fragment会调用onCreate进行创建工作,接着通过onCreateView构建View hierarchy。
    当一个activity包含多个fragment时,Android针对每个Fragment会连续循环调用以下四个方法:Fragment.onAttach,Activity.onAttachFragment,Fragment.onCreate,和Fragment.onCreateView。这样做是确保下一个fragment开始以上过程之前,先前的fragment完成了附属(attach)、创建的过程。
    当所有的fragment都完成了上述四个方法地调用,剩下的步骤就是每个fragments单独的调用其建立和显示的回调方法。在activity完成了onCreate方法的调用,Android会调用fragment的onActivityCreated方法。onActivityCreated方法调用后表面表明所有的view、fragment被activity的布局资源创建并且能安全地被访问。
   fragment也有onStart、onResume的回调方法,这跟Activity的生命周期回调方法类似,不过fragment的onStart、onResume的调用时机分别是在Activity完成了其onStart、onResume的调用。
   对很多fragment来说,我们只需要重写他们生命周期中的onCreate和onCreateView方法。
    Activity和Fragment有很多名字相同的回调方法,它们当中很多作用是类似的。但是有一个很重要的例外—onCreateView方法,      Activity和Fragment各自的onCreateView方法的作用大相径庭。就像前文提到,Android调用Fragment类的onCreateView方法,这样就给了该fragment一个机会去创建并返回fragment所包含的View hierarchy。该方法在fragment中通常被重写。而Activity的onCreateView方法是在inflate布局资源过程中被LayoutInflate类重复调用。很多Activity是不需要重写该方法。

PS:该片文章是翻译自 Creating Dynamic UI with Android Fragments,该文档通篇都是介绍Fragment,我觉得读后大有收获!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值