Fragment生命周期

Fragment官方生命周期圖
image.png
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)建,一樣能恢復(fù)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)建一樣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容