天天看點

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