1. 程式人生 > >Fragment 生命周期:

Fragment 生命周期:

異常 fin dial 解除綁定 豎屏 一個 str 退出 官方

Fragment每個生命周期方法的意義、作用(註意紅色的不是生命周期方法):
setUserVisibleHint():設置Fragment可見或者不可見時會調用此方法。在該方法裏面可以通過調用getUserVisibleHint()獲得Fragment的狀態是可見還是不可見的,如果可見則進行懶加載操作。
onAttach():執行該方法時,Fragment與Activity已經完成綁定,該方法有一個Activity類型的參數,代表綁定的Activity,這時候你可以執行諸如mActivity = activity的操作。
onCreate():初始化Fragment。可通過參數savedInstanceState獲取之前保存的值。
onCreateView():初始化Fragment的布局。加載布局和findViewById的操作通常在此函數內完成,但是不建議執行耗時的操作,比如讀取數據庫數據列表。
onActivityCreated():執行該方法時,與Fragment綁定的Activity的onCreate方法已經執行完成並返回,在該方法內可以進行與Activity交互的UI操作,所以在該方法之前Activity的onCreate方法並未執行完成,如果提前進行交互操作,會引發空指針異常。
onStart():執行該方法時,Fragment由不可見變為可見狀態。
onResume():執行該方法時,Fragment處於活動狀態,用戶可與之交互。
onPause():執行該方法時,Fragment處於暫停狀態,但依然可見,用戶不能與之交互。
onSaveInstanceState():保存當前Fragment的狀態。該方法會自動保存Fragment的狀態,比如EditText鍵入的文本,即使Fragment被回收又重新創建,一樣能恢復EditText之前鍵入的文本。
onStop():執行該方法時,Fragment完全不可見。
onDestroyView():銷毀與Fragment有關的視圖,但未與Activity解除綁定,依然可以通過onCreateView方法重新創建視圖。通常在ViewPager+Fragment的方式下會調用此方法。
onDestroy():銷毀Fragment。通常按Back鍵退出或者Fragment被回收時調用此方法。
onDetach():解除與Activity的綁定。在onDestroy方法之後調用。

Fragment生命周期執行流程(註意紅色的不是生命周期方法):
Fragment創建:setUserVisibleHint()->onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume();
Fragment變為不可見狀態(鎖屏、回到桌面、被Activity完全覆蓋):onPause()->onSaveInstanceState()->onStop();
Fragment變為部分可見狀態(打開Dialog樣式的Activity):onPause()->onSaveInstanceState();
Fragment由不可見變為活動狀態:onStart()->OnResume();
Fragment由部分可見變為活動狀態:onResume();
退出應用:onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()(註意退出不會調用onSaveInstanceState方法,因為是人為退出,沒有必要再保存數據);
Fragment被回收又重新創建:被回收執行onPause()->onSaveInstanceState()->onStop()->onDestroyView()->onDestroy()->onDetach(),重新創建執行onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->setUserVisibleHint();
橫豎屏切換:與Fragment被回收又重新創建一樣。

官方生命周期圖

技術分享

Fragment 生命周期: