這篇文章和上一篇文章同樣,基本上都是總結,沒有給出實際的log日誌和片斷代碼,我以爲這些東西須要本身去實踐證明,而不是看到別人貼的代碼就認爲是對的,上一篇文章是activity的生命週期(總結),後續會一直整理我有道筆記裏面總結的一些問題,都是比較實際性的總結,但願對你們有幫助。數據庫
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方法以後調用。
setUserVisibleHint():
設置Fragment可見或者不可見時會調用此方法。在該方法裏面能夠經過調用getUserVisibleHint()得到Fragment的狀態是可見仍是不可見的,若是可見則進行懶加載操做。ide
一、Fragment建立:
setUserVisibleHint()->onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume();
二、Fragment變爲不可見狀態(鎖屏、回到桌面、被Activity徹底覆蓋):
onPause()->onSaveInstanceState()->onStop();
三、Fragment變爲部分可見狀態(打開Dialog樣式的Activity):
onPause()->onSaveInstanceState();
四、Fragment由不可見變爲活動狀態:
onStart()->OnResume();
五、Fragment由部分可見變爲活動狀態:
onResume();
五、Fragment退出:
onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()(注意退出不會調用onSaveInstanceState方法,由於是人爲退出,沒有必要再保存數據);
六、Fragment被回收又從新建立:
被回收執行onPause()->onSaveInstanceState()->onStop()->onDestroyView()->onDestroy()->onDetach(),從新建立執行onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()->setUserVisibleHint();
橫豎屏切換:與Fragment被回收又從新建立同樣。函數
當使用add()+show(),hide()跳轉新的Fragment時,舊的Fragment回調onHiddenChanged(),不會回調onStop()等生命週期方法,而新的Fragment在建立時是不會回調onHiddenChanged(),這點要切記。佈局
一、 使用FragmentPagerAdapter+ViewPager時,切換回上一個Fragment頁面時(已經初始化完畢),不會回調任何生命週期方法以及onHiddenChanged(),只有setUserVisibleHint(boolean isVisibleToUser)會被回調,因此若是你想進行一些懶加載,須要在這裏處理。
二、 在給ViewPager綁定FragmentPagerAdapter時,
new FragmentPagerAdapter(fragmentManager)的FragmentManager,必定要保證正確,若是ViewPager是Activity內的控件,則傳遞getSupportFragmentManager(),若是是Fragment的控件中,則應該傳遞getChildFragmentManager()。只要記住ViewPager內的Fragments是當前組件的子Fragment這個原則便可。
三、 你不須要考慮在「內存重啓」的狀況下,去恢復的Fragments的問題,由於FragmentPagerAdapter已經幫咱們處理啦。post
一般狀況下都是由於PagerAdapter不是FragmentPagerAdapter形成的,FragmentPagerAdapter內部實現了對setUserVisibleHint()方法的調用,因此須要懶加載的結構最好使用FragmentPagerAdapter +Fragment的結構,少用PagerAdapter。指針