Fragment生命周期

作者: sakurajiang | 来源:发表于2016-11-10 14:02 被阅读940次

    先说一下

    之前我觉得v4包下的fragment和app下的fragment生命周期应该是一样的,结果不一样。

    app包下的fragment生命周期

    开关屏幕时fragment的生命周期

    直接在最开始使用add方法添加到activity后,fragemnt的生命周期


    appfragmentfirstAdd-20161110

    关闭屏幕后的生命周期:

    appfragment1 closecereen-20161110

    打开屏幕后的生命周期:

    appfragment1openscreen-20161110

    销毁activity后的生命周期:

    appfragmentthenactivitydestroy-20161110

    调用各个方法后fragment的生命周期

    当fragment1加载后,点击按钮后用add方法加载fragment2后生命周期:

    appfragment2Add-20161110

    调用remove方法后fragment生命周期:

    appfragmentremove-20161110

    调用attach后fragment的生命周期:

    appfragment1Attach-20161110

    调用detach后fragment的生命周期:

    appfragment1detach-20161110

    调用replace加载fragment2后fragment2以及fragment1的生命周期

    appafterfragment1Addthenreplace-20161110

    销毁activity后的生命周期:

    v4包下的fragment生命周期

    开关屏幕时的fragment生命周期

    直接最开始使用add方法添加到activity后,fragemnt的生命周期


    v4fragemntfirstAdd-20161110

    关闭屏幕后的生命周期:

    v4fragment1closescreen-20161110

    打开屏幕后的生命周期:

    v4fragment1openscreen-20161110

    销毁activity后的生命周期:

    v4fragmentthenactivitydestroy-20161110

    调用各个方法后fragment的生命周期

    当fragment1加载后,点击按钮后用add方法加载fragment2后生命周期:

    v4fragment2 Add-20161110

    调用remove方法后fragment生命周期

    v4fragment1Remove-20161110

    调用attach后fragment的生命周期:

    v4fragment1Attach-20161110

    调用detach后fragment的生命周期:

    v4fragment1 Detach-20161110

    调用replace加载fragment2后fragment2以及fragment1的生命周期

    v4afterfragment1 Addthenreplace-20161110

    总结

    1.显示fragment有add,attach,show。消失fragment有remove,detach,hide。第一次fragment要动态添加到activity中,必须使用add方法,增加到回退栈只能通过addToBackStack()方法。
    2.调用add方法运行的生命周期是从onAttach到onResume,(app包下的fragment是从onCreate到onResume),remove方法运行周期是onPause到onDetach,并且,都是先销毁再添加,即调用add方法的时候还调用了销毁的方法,那么都是先销毁再添加,但是由于v4下的fragment在add方法的时候会执行onAttach到onResume,就像我在上一篇博客(viewPager下fragment生命周期)中讲的一样,fragment的onAttach,onCreate都会在别的fragment的除了onAttach,onCreate之外的生命周期之前,所以,调用replace方法后的生命周期,v4下的fragment是这样,app下的fragment是那样。并且,在remove的时候调用 addToBackStack()方法,那么调用remove生命周期只会是onPause到onDestroyView。
    3.调用attach方法运行的生命周期是onCreateView到onResume ,detach方法运行生命周期是onPause到onDestroyView ,同时这两个谁先使用谁先调用,也就是那边的生命周期先走。这个方法的作用就是将fragment试图粘到UI试图中,而不是将fragment粘在activity上。
    4.调用show()和hide()方法不会运行声明周期。
    5.要想消失后正确的显示,必须调用与让其消失对应的方法,即如果你通过detach方法让fragment消失,那么就要用attach方法,别的都不行。对别的也是一样。
    6.因为fragment是依赖activity的,所以,activity先于fragment准备好,后于fragment消失
    但是,v4下的fragment的onStart在activity的onstart之前,这一点,可以翻阅源码查看:
    v4下fragment的onStart源码:

    /**
     * Called when the Fragment is visible to the user.  This is generally
     * tied to {@link Activity#onStart() Activity.onStart} of the containing
     * Activity's lifecycle.
     */
    @CallSuper
    public void onStart() {
        mCalled = true;
    
        if (!mLoadersStarted) {
            mLoadersStarted = true;
            if (!mCheckedForLoaderManager) {
                mCheckedForLoaderManager = true;
                mLoaderManager = mHost.getLoaderManager(mWho, mLoadersStarted, false);
            }
            if (mLoaderManager != null) {
                mLoaderManager.doStart();
            }
        }
    }
    

    app下fragment的onStart源码

    public void onStart() {
        throw new RuntimeException("Stub!");
    }

    相关文章

      网友评论

        本文标题:Fragment生命周期

        本文链接:https://www.haomeiwen.com/subject/odhxpttx.html