Fragment每個生命周期方法的意義彻况、作用(注意紅色的不是生命周期方法):
方法名 | 說明 |
---|---|
setUserVisibleHint(): | 設(shè)置Fragment可見或者不可見時會調(diào)用此方法撕瞧。在該方法里面可以通過調(diào)用getUserVisibleHint()獲得Fragment的狀態(tài)是可見還是不可見的,如果可見則進行懶加載操作霹期。 |
onAttach(): | 執(zhí)行該方法時,F(xiàn)ragment與Activity已經(jīng)完成綁定,該方法有一個Activity類型的參數(shù)雕擂,代表綁定的Activity冰更,這時候你可以執(zhí)行諸如mActivity = activity的操作产徊。 |
onCreate(): | 初始化Fragment∈裣福可通過參數(shù)savedInstanceState獲取之前保存的值舟铜。 |
onCreateView(): | 初始化Fragment的布局。加載布局和findViewById的操作通常在此函數(shù)內(nèi)完成奠衔,但是不建議執(zhí)行耗時的操作谆刨,比如讀取數(shù)據(jù)庫數(shù)據(jù)列表。 |
onActivityCreated(): | 執(zhí)行該方法時归斤,與Fragment綁定的Activity的onCreate方法已經(jīng)執(zhí)行完成并返回痊夭,在該方法內(nèi)可以進行與Activity交互的UI操作,所以在該方法之前Activity的onCreate方法并未執(zhí)行完成官册,如果提前進行交互操作生兆,會引發(fā)空指針異常。 |
onStart(): | 執(zhí)行該方法時膝宁,F(xiàn)ragment由不可見變?yōu)榭梢姞顟B(tài)鸦难。 |
onResume(): | 執(zhí)行該方法時,F(xiàn)ragment處于活動狀態(tài)员淫,用戶可與之交互合蔽。 |
onPause(): | 執(zhí)行該方法時,F(xiàn)ragment處于暫停狀態(tài)介返,但依然可見拴事,用戶不能與之交互沃斤。 |
onSaveInstanceState(): | 保存當前Fragment的狀態(tài)。該方法會自動保存Fragment的狀態(tài)刃宵,比如EditText鍵入的文本衡瓶,即使Fragment被回收又重新創(chuàng)建,一樣能恢復EditText之前鍵入的文本牲证。 |
onStop(): | 執(zhí)行該方法時哮针,F(xiàn)ragment完全不可見。 |
onDestroyView(): | 銷毀與Fragment有關(guān)的視圖坦袍,但未與Activity解除綁定十厢,依然可以通過onCreateView方法重新創(chuàng)建視圖。通常在ViewPager+Fragment的方式下會調(diào)用此方法捂齐。 |
onDestroy(): | 銷毀Fragment蛮放。通常按Back鍵退出或者Fragment被回收時調(diào)用此方法。 |
onDetach(): | 解除與Activity的綁定奠宜。在onDestroy方法之后調(diào)用包颁。 |
Fragment生命周期執(zhí)行流程(注意紅色的不是生命周期方法):
Fragment創(chuàng)建:
setUserVisibleHint()->onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume();
Fragment變?yōu)椴豢梢姞顟B(tài)(鎖屏挎塌、回到桌面徘六、被Activity完全覆蓋):
onPause()->onSaveInstanceState()->onStop();
Fragment變?yōu)椴糠挚梢姞顟B(tài)(打開Dialog樣式的Activity):
onPause()->onSaveInstanceState()榴都;
Fragment由不可見變?yōu)榛顒訝顟B(tài):
onStart()->OnResume()待锈;
Fragment由部分可見變?yōu)榛顒訝顟B(tài):
onResume();
退出應(yīng)用:
onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()
(注意退出不會調(diào)用onSaveInstanceState方法嘴高,因為是人為退出竿音,沒有必要再保存數(shù)據(jù));
Fragment被回收又重新創(chuàng)建:
被回收執(zhí)行
onPause()->onSaveInstanceState()->onStop()->onDestroyView()->onDestroy()->onDetach()
重新創(chuàng)建執(zhí)行
onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->setUserVisibleHint()拴驮;
橫豎屏切換:與Fragment被回收又重新創(chuàng)建一樣春瞬。