天天看点

Fragment生命周期与宿主Activity生命周期

当启动activity是,同时启动activity里面的fragment,各生命周期的起调流程

11-22 16:51:22.051 8358-8358/com.txjifei.mapclient.liteapp E/lgqq: ...Activity====onCreate===11111

11-22 16:51:22.070 8358-8358/com.txjifei.mapclient.liteapp E/lgqq: ...Activity====onStart===33333

11-22 16:51:22.073 8358-8358/com.txjifei.mapclient.liteapp E/lgqq: ...Activity====onResume===22222

11-22 16:51:22.093 8358-8358/com.txjifei.mapclient.liteapp I/lgqq: ...Fragment====onAttach===1111

    ...Fragment====onCreate===22222

11-22 16:51:22.102 8358-8358/com.txjifei.mapclient.liteapp I/lgqq: ...Fragment====onCreateView===333333

    ...Fragment====onActivityCreated===4444444

    ...Fragment====onStart===55555

    ...Fragment====onResume===666666

说明:

          只有真正的掌握 生命周期 才能更好的运用frgment .

       1.onAttach() 

          作用:fragment已经关联到activity,这个时候 activity已经传进来了, 获得activity的传递的值 就可以进行 与activity的通信里, 当然也可以使用getActivity(),前提是这个fragment已经和宿主的activity关联,并且没有脱离,有且只有调用一次。

         2.onCreate()

        系统创建fragment的时候回调他,在他里面实例化一些变量 

        这些个变量主要是:当你 暂停 停止的时候 你想保持的数据 

        他只调用一次。

        3.onCreateView()

          第一次使用的时候 fragment会在这上面画一个layout出来, 为了可以画控件 要返回一个 布局的view,也可以返回null j 就什么都没有显示。 

           当系统用到fragment的时候 fragment就要返回他的view,越快越好 ,所以尽量在这里不要做耗时操作,比如从数据库加载大量数据 

        4onActivityCreated()

             当Activity中的onCreate方法执行完后调用。

从这句官方的话可以看出:当执行onActivityCreated()的时候 activity的onCreate才刚完成。

所以在onActivityCreated()调用之前 activity的onCreate可能还没有完成,

所以不能再onCreateView()中进行 与activity有交互的UI操作,UI交互操作可以在onActivityCreated()里面进行。

所以呢,这个方法主要是初始化那些你需要你的父Activity或者Fragment的UI已经被完

整初始化才能初始化的元素。

       5.onStart()

       和activity一致,启动Fragement 启动时回调,,此时Fragement可见。

       6.onResume()

        和activity一致 在activity中运行是可见的。激活, Fragement 进入前台, 可获取焦点时激活。

       7.onPause()

        和activity一致 其他的activity获得焦点,这个仍然可见第一次调用的时候,指的是 用户 离开这个fragment(并不是被销毁)

通常用于 用户的提交(可能用户离开后不会回来了)

        8.onStop()

       和activity一致, fragment不可见的, 可能情况:activity被stopped了或者 fragment被移除但被,加入到回退栈中,一个stopped的fragment仍然是活着的如果长时间不用也会被移除。

       9.   onDestroyView() 

      Fragment中的布局被移除时调用。表示fragemnt销毁相关联的UI布局, 清除所有跟视图相关的资源。

然后这个知识移除视图  并没有销毁而且还没有脱离activity

       10.onDestroy()

       销毁fragment对象, 跟activity类似了。

      11.onDetach()

       Fragment和Activity解除关联的时候调用。 脱离activity。

当退出当前fragment时,同时退出当前宿主activity时,各声明周期起调流程

11-22 16:52:35.410 8358-8358/com.txjifei.mapclient.liteapp I/lgqq: ...Fragment====onPause===777777

11-22 16:52:35.411 8358-8358/com.txjifei.mapclient.liteapp E/lgqq: ...Activity====onPause===4444444

11-22 16:52:35.768 8358-8358/com.txjifei.mapclient.liteapp I/lgqq: ...Fragment====onStop===888888

11-22 16:52:35.768 8358-8358/com.txjifei.mapclient.liteapp E/lgqq: ...Activity====onStop===555555

11-22 16:52:35.769 8358-8358/com.txjifei.mapclient.liteapp I/lgqq: ...Fragment====onDestroy===9999999

    ...Fragment====onDetach===000000

11-22 16:52:35.769 8358-8358/com.txjifei.mapclient.liteapp E/lgqq: ...Activity====onDestroy===666666

当前fragment从后台重新回到前台可见时,fragment与宿主activity各生命周期流程

11-22 16:55:39.499 8358-8358/com.txjifei.mapclient.liteapp I/lgqq: ...Fragment====onStart===55555

11-22 16:55:39.499 8358-8358/com.txjifei.mapclient.liteapp E/lgqq: ...Activity====onStart===33333

11-22 16:55:39.501 8358-8358/com.txjifei.mapclient.liteapp E/lgqq: ...Activity====onResume===22222

11-22 16:55:39.501 8358-8358/com.txjifei.mapclient.liteapp I/lgqq: ...Fragment====onResume===666666

当前fragment从前台可见到后台不可见时,fragment与宿主activity生命周期流程

11-22 16:59:12.944 8358-8358/com.txjifei.mapclient.liteapp I/lgqq: ...Fragment====onPause===777777

11-22 16:59:12.945 8358-8358/com.txjifei.mapclient.liteapp E/lgqq: ...Activity====onPause===4444444

11-22 16:59:13.322 8358-8358/com.txjifei.mapclient.liteapp I/lgqq: ...Fragment====onStop===888888

11-22 16:59:13.323 8358-8358/com.txjifei.mapclient.liteapp E/lgqq: ...Activity====onStop===555555