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

Fragment的隐藏和销毁和其的建立和显示一样,也有类似于Activity的生命周期。下图是Fragment隐藏和销毁的生命周期。

Android-->Fragment生命周期详解(下)_第1张图片

   在Fragment隐藏和销毁开始之初,Fragment的生命周期和Activity类似。当用户跳转到其他的Activity之时,每个Fragment的onPause、onSaveInstanceState和onStop方法将被调用。对于这些方法而言,Fragment的回调方法会在Activity的之前调用。


当Fragment的onStop方法被调用后,那么之后的过程就和Activity有点不同了。接着Activity的onStop方法被调用,然后Fragment的onDestoryView方法被调用后说明通过onCreateView方法返回的View被销毁了。Fragment的onDetach方法在其onDestory方法被调用之后调用。在onDetach方法调用之后,说明Fragment已经获取不到Activity的实例,通过调用getActivity返回的实例为空。


    如果Activity包含多个Fragment,Android会循环调用以下三个方法,onDestoryView、onDestoty和onDetach方法。这个步骤和上文中提到多个Fragment的attach和create过程是很相似的。一旦所有fragment完成该循环操作,Android会调用Activity的onDestory方法。

   大多数情况下,Fragment生命周期的管理和Activity的类似。但有一个非常重要的不同处:就是在Fragment创建和销毁这两个过程。Fragment将创建和销毁View hierarchy(onCreateView返回的View)过程分开,是因为当Fragment没有view hierarchy时,Fragment也应能够存在并访问Activity。

    很多情况下,一个Activity会包含多个Fragment,但是某一时刻只会有部分fragment是可见的。在这种情况下,所有被包含的fragment的onAttach和onCreate方法被调用。但是其onCreateView方法会直到fragment可见时才被调用。同样地,只有当fragment的onDestoryView方法被调用后,fragment才会处于不可见状态。

    以上提到的Fragment不同于Activity之初在Activity需要动态的管理fragment的时候就有用武之地了。我们可以通过FragmentTransaction类来管理Fragment的隐藏与可见。

    Fragment有一个非常重要的回调方法,onSaveInstanceState。和Activity一样,该方法可以在Fragment销毁之前用于保存任何状态。比如跳转到其他Activity或者旋转屏幕时,当前activity和其包含的fragment将会销毁和重建。通过onSaveInstanceState来保存一些Fragment的状态,不久后当返回该fragment时,我们可以通过onCreate和onCreateView方法来恢复fragment状态。
   
    最后,当处理一些复杂的初始化操作时,譬如连接数据源、复杂的计算或者资源分配,我们应该在onCreate中进行操作而不是onCreateView。因为,当Fragment的view hierarchy被销毁(即fragment的onDestoryView被调用)但该fragment还没销毁,那么我们就能避免在onCreateView中重新初始化那些复杂操作。

你可能感兴趣的:(好文分享)