1. 程式人生 > >Fragment的生命週期以及與Activity生命週期聯動

Fragment的生命週期以及與Activity生命週期聯動

在學Fragment之前肯定學過了Activity,Activity有屬於自己的生命週期,Fragment基本上和activity 大體一樣,但是有自己特有的生命週期方法,下面我們一起來看一下。

說白了主要看兩張圖,和執行程式碼:

一. Fragment的生命週期


二. 與Activity生命週期的對比


三. 場景演示 :

①啟動Fragment

07-05 11:14:48.791 16273-16273/com.mypractice E/----A Activity----: onCreate
07-05 11:14:48.809 16273-16273/com.mypractice E/----A Activity----: onStart


07-05 11:14:48.809 16273-16273/com.mypractice E/----A Fragment----: onAttach
07-05 11:14:48.809 16273-16273/com.mypractice E/----A Fragment----: onCreate
07-05 11:14:48.809 16273-16273/com.mypractice E/----A Fragment----: onCreateView
07-05 11:14:48.813 16273-16273/com.mypractice E/----A Fragment----: onActivityCreated
07-05 11:14:48.813 16273-16273/com.mypractice E/----A Fragment----: onStart
07-05 11:14:48.813 16273-16273/com.mypractice E/----A Activity----: onResume

07-05 11:14:48.813 16273-16273/com.mypractice E/----A Fragment----: onResume
②鎖屏(注意此處Fragment的onSaveInstanceState方法執行,但是Activity的此方法並未執行,解釋見文末尾註釋):

07-05 11:18:36.007 16273-16273/com.mypractice E/----A Activity----: onPause
07-05 11:18:36.007 16273-16273/com.mypractice E/----A Fragment----: onPause

07-05 11:18:36.007 16273-16273/com.mypractice E/----A Fragment----:onSaveInstanceState


07-05 11:18:36.193 16273-16273/com.mypractice E/----A Activity----: onStop
07-05 11:18:36.194 16273-16273/com.mypractice E/----A Fragment----: onStop

③解鎖:

07-05 11:19:20.898 16273-16273/com.mypractice E/----A Activity----: onRestart
07-05 11:19:20.899 16273-16273/com.mypractice E/----A Activity----: onStart
07-05 11:19:20.899 16273-16273/com.mypractice E/----A Fragment----: onStart
07-05 11:19:20.910 16273-16273/com.mypractice E/----A Activity----: onResume
07-05 11:19:20.910 16273-16273/com.mypractice E/----A Fragment----: onResume

④切換到其它 Fragment(A --> B):

07-05 11:21:02.961 16273-16273/com.mypractice E/----A Activity----: onPause
07-05 11:21:02.961 16273-16273/com.mypractice E/----A Fragment----: onPause
07-05 11:21:02.999 16273-16273/com.mypractice E/----B Fragment----: onAttach
07-05 11:21:02.999 16273-16273/com.mypractice E/----B Fragment----: onCreate
07-05 11:21:03.000 16273-16273/com.mypractice E/----B Fragment----: onCreateView
07-05 11:21:03.002 16273-16273/com.mypractice E/----B Fragment----: onActivityCreated
07-05 11:21:03.002 16273-16273/com.mypractice E/----B Fragment----: onStart
07-05 11:21:03.003 16273-16273/com.mypractice E/----B Fragment----: onResume

07-05 11:21:03.900 6921-6921/kj.com.mypractice E/----A Fragment----: onSaveInstanceState
07-05 11:21:03.452 16273-16273/com.mypractice E/----A Activity----: onStop
07-05 11:21:03.452 16273-16273/com.mypractice E/----A Fragment----: onStop

⑤Back鍵返回(B --> A):

07-05 11:23:32.094 16273-16273/com.mypractice E/----B Fragment----: onPause
07-05 11:23:32.099 16273-16273/com.mypractice E/----A Activity----: onRestart
07-05 11:23:32.100 16273-16273/com.mypractice E/----A Activity----: onStart
07-05 11:23:32.100 16273-16273/com.mypractice E/----A Fragment----: onStart
07-05 11:23:32.100 16273-16273/com.mypractice E/----A Activity----: onResume
07-05 11:23:32.100 16273-16273/com.mypractice E/----A Fragment----: onResume
07-05 11:23:32.515 16273-16273/com.mypractice E/----B Fragment----: onStop
07-05 11:23:32.516 16273-16273/com.mypractice E/----B Fragment----: onDestroyView
07-05 11:23:32.516 16273-16273/com.mypractice E/----B Fragment----: onDestroy
07-05 11:23:32.516 16273-16273/com.mypractice E/----B Fragment----: onDetach

⑥Home鍵回到桌面:

07-05 11:25:56.622 16273-16273/com.mypractice E/----A Activity----: onPause
07-05 11:25:56.623 16273-16273/com.mypractice E/----A Fragment----: onPause

07-05 11:51:26.861 6921-6921/kj.com.mypractice E/----A Fragment----: onSaveInstanceState
07-05 11:25:57.252 16273-16273/com.mypractice E/----A Activity----: onStop
07-05 11:25:57.252 16273-16273/com.mypractice E/----A Fragment----: onStop

⑦Home鍵之後返回應用:

07-05 11:26:48.603 16273-16273/com.mypractice E/----A Activity----: onRestart
07-05 11:26:48.603 16273-16273/com.mypractice E/----A Activity----: onStart
07-05 11:26:48.603 16273-16273/com.mypractice E/----A Fragment----: onStart
07-05 11:26:48.603 16273-16273/com.mypractice E/----A Activity----: onResume
07-05 11:26:48.603 16273-16273/com.mypractice E/----A Fragment----: onResume

⑧退出Activity(即退出Fragment):

07-05 11:28:17.679 16273-16273/com.mypractice E/----A Activity----: onPause
07-05 11:28:17.679 16273-16273/com.mypractice E/----A Fragment----: onPause
07-05 11:28:18.109 16273-16273/com.mypractice E/----A Activity----: onStop
07-05 11:28:18.110 16273-16273/com.mypractice E/----A Fragment----: onStop
07-05 11:28:18.110 16273-16273/com.mypractice E/----A Activity----: onDestroy
07-05 11:28:18.110 16273-16273/com.mypractice E/----A Fragment----: onDestroyView
07-05 11:28:18.111 16273-16273/com.mypractice E/----A Fragment----: onDestroy
07-05 11:28:18.111 16273-16273/com.mypractice E/----A Fragment----: onDetach

補充:兩Activity跳轉生命週期方法執行順序:

① A --> B

07-05 11:32:23.460 27917-27917/kj.com.mypractice E/----A Activity----: onPause

07-05 11:32:23.513 27917-27917/kj.com.mypractice E/----B Activity----: onCreate

07-05 11:32:23.513 27917-27917/kj.com.mypractice E/----B Activity----: onStart
07-05 11:32:23.513 27917-27917/kj.com.mypractice E/----B Activity----: onResume
07-05 11:32:23.953 27917-27917/kj.com.mypractice E/----A Activity----: onStop

② B --> A

07-05 11:37:45.538 27917-27917/kj.com.mypractice E/----B Activity----: onPause
07-05 11:37:45.547 27917-27917/kj.com.mypractice E/----A Activity----: onRestart
07-05 11:37:45.547 27917-27917/kj.com.mypractice E/----A Activity----: onStart
07-05 11:37:45.547 27917-27917/kj.com.mypractice E/----A Activity----: onResume
07-05 11:37:45.976 27917-27917/kj.com.mypractice E/----B Activity----: onStop
07-05 11:37:45.976 27917-27917/kj.com.mypractice E/----B Activity----: onDestroy

註釋:

Activity可能被殺死也就是異常終止,之後: OnSaveInstanceState(onStop之前) --> OnRestoreInstanceState(onStart之後) 正常結束只有BACK鍵  ,異常終止的情況(注意是可能,並不是一定):
1、資源相關的系統配置被改變,比如橫豎屏、輸入法顯示和隱藏 2、系統記憶體不足時 3、HOME鍵或者鎖屏