分享好友 移动开发首页 频道列表

RestAPP-fragment生命周期

Android开发  2016-11-10 13:470

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

app包下的fragment生命周期

开关屏幕时fragment的生命周期

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

RestAPP-fragment生命周期

关闭屏幕后的生命周期:

RestAPP-fragment生命周期

打开屏幕后的生命周期:

RestAPP-fragment生命周期

销毁activity后的生命周期:

RestAPP-fragment生命周期

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

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

RestAPP-fragment生命周期

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

RestAPP-fragment生命周期

调用attach后fragment的生命周期:

RestAPP-fragment生命周期

调用detach后fragment的生命周期:

RestAPP-fragment生命周期

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

RestAPP-fragment生命周期

销毁activity后的生命周期:

v4包下的fragment生命周期

开关屏幕时的fragment生命周期

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

RestAPP-fragment生命周期

关闭屏幕后的生命周期:

RestAPP-fragment生命周期

打开屏幕后的生命周期:

RestAPP-fragment生命周期

销毁activity后的生命周期:

RestAPP-fragment生命周期

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

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

RestAPP-fragment生命周期

调用remove方法后fragment生命周期

RestAPP-fragment生命周期

调用attach后fragment的生命周期:

RestAPP-fragment生命周期

调用detach后fragment的生命周期:

RestAPP-fragment生命周期

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

RestAPP-fragment生命周期

总结

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的on Start在activity的on start之前,这一点,可以翻阅源码查看:

v4下fragment的on Start源码:

/**
 * Called when the Fragment is visible to the user.  This is generally
 * tied to {@link Activity#on
Start() Activity.on
Start} of the containing
 * Activity's lifecycle.
 */
@CallSuper
public void on
Start() {
    mCalled = true;

    if (!mLoadersStarted) {
        mLoadersStarted = true;
        if (!mCheckedForLoaderManager) {
            mCheckedForLoaderManager = true;
            mLoaderManager = mHost.getLoaderManager(mWho, mLoadersStarted, false);
        }
        if (mLoaderManager != null) {
            mLoaderManager.doStart();
        }
    }
}

app下fragment的on Start源码

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

查看更多关于【Android开发】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
Supporting Multiple Screens
术语和概念Screen size 屏幕尺寸又称「屏幕大小」,是屏幕对角线的物理尺寸。单位英寸 inch,比如 Samsung Note4 是 5.7 英寸。Resolution 屏幕分辨率屏幕纵横方向上物理像素的总数,比如 Samsung Note4 是 2560x1440,表示纵向有 2560 个像素,横向有 1440

0评论2017-02-05363

Android插件化(4):OpenAtlasの插件的卸载与更新
如果看过我的前两篇博客Android插件化(2):OpenAtlas插件安装过程分析和Android插件化(3):OpenAtlas的插件重建以及使用时安装,就知道在插件的安装过程中OpenAtlas做了哪些事,那么插件的卸载就只需要把持久化和内存中的内容移除即可。1.插件的卸载插件卸载的

0评论2017-02-05229

个人简历
吴朝晖/男/1993.1本科/南京师范大学中北学院信息系工作年限:1年以内技术博客:wuzhaohui026.github.ioGitHub:https://github.com/wuzhaohui026期望职位:Android开发(初级Android工程师)期望薪资:税前月薪5.5k~7k期望城市:常州工作经历常州慧展信息科技有

0评论2017-02-05126

Android插件化(五):OpenAtlasの四大组件的Hack
引言到目前为止,我们已经分析了OpenAtlas中插件的安装,卸载,更新,以及安装好插件之后组件类的加载过程,但是对于这些是如何引发的还不知道,比如,在宿主的一个Activit中调用startActivity()跳转到插件中的一个Activity,如何判断这个Activity在的插件是否

0评论2017-02-0598

更多推荐