Fragment的什么周期
1.onAttach ->onCreate->onCreateView-onActivityCreated ->onStart->onResume->onPause->onStop->onDestoryView->onDestory->onDetach
2.onAttach 在fragment和activityt關(guān)聯(lián)之后調(diào)用
3.onCreate 在fragment第一次創(chuàng)建的時(shí)候調(diào)用闷旧,這個(gè)時(shí)候ac還沒(méi)創(chuàng)建完成 ,所以不能獲取當(dāng)前ac的一些資源
onCreateView是在構(gòu)造視圖時(shí)調(diào)用双妨,這個(gè)時(shí)候 ac也沒(méi)創(chuàng)建完成
4.onActivityCreated ac調(diào)用onCreate之后調(diào)用,可以用ac的一些資源了
5.onStart onResume onStop onPause 同ac一樣
6.onDestoryView fragment即將被結(jié)束活保存的時(shí)候調(diào)用
7.onDestory 當(dāng)這個(gè)fragment不再使用時(shí)調(diào)用骆莹。但是還能被ac找到,因?yàn)闆](méi)有被detach
8.onDetach 最后調(diào)用的该溯,調(diào)用之后fragmetn就不再和ac想綁定了。
9.有一點(diǎn)很重要,Activity的onResume是可見(jiàn)屠橄,而Fragment不能這樣理解之拨, 要理解為預(yù)加載的幾個(gè)界面都是現(xiàn)實(shí)的,因?yàn)轭A(yù)加載的時(shí)候都已經(jīng)把onResume走了氯哮。他是根據(jù)setUserVisibleHint(boolean show)這個(gè)方法.
Fragment的另一個(gè)重要的東西FragmetnPageAdapter 和FragmetnStatePageAdapter
用FragmetnPageAdapter的話(huà)
第一次進(jìn)來(lái) 當(dāng)前第一個(gè)界面和右邊的界面都會(huì)走attach onCreate onCreateView onActivityCreated onStart onResume
向右滑動(dòng)到第二個(gè)界面 雖然第一個(gè)界面不顯示了 但是不會(huì)走第一個(gè)的生命周期穴肘, 會(huì)走第三個(gè)界面的 attach onCreate onCreateView onActivityCreated onStart onResume,
在向右滑動(dòng)到第三個(gè)界面 第四個(gè)界面會(huì)走上面的attach 到onResume ,這個(gè)時(shí)候因?yàn)轭A(yù)加載默認(rèn)是1,所以第一個(gè)界面會(huì)走onPause—onStop —onDestoryView帘不,這個(gè)時(shí)候只摧毀了view視圖储狭,而沒(méi)有吧fragment摧毀掉,如果要把fragmetn摧毀掉肯定會(huì)走onDetach()
再向右滑動(dòng)到第四個(gè)界面僧凤,這個(gè)時(shí)候,因?yàn)榈谒膫€(gè)界面已經(jīng)預(yù)加載過(guò)了召烂,所以只會(huì)走第二個(gè)界面的onPause—onStop —onDestoryView
現(xiàn)在向左滑動(dòng)到第三個(gè)界面,會(huì)走第二個(gè)界面的onCreateView onActivityCreateView onstart 和onResume
再向左同上
如果直接屏幕關(guān)了 這個(gè)時(shí)候會(huì)走這預(yù)加載的三個(gè)界面的onPause 和onStop春弥,再開(kāi)屏幕就是onStart 和onResume
用FragmentStatePageAdapter的話(huà)
其余的都和FragmetnPageAdapte一樣
第三點(diǎn)不一樣呛哟,滑動(dòng)到第三個(gè)的時(shí)候,預(yù)加載還是默認(rèn)為1的時(shí)候惕稻,第一個(gè)界面不是摧毀view視圖了竖共,而是直接把fragment摧毀了蝙叛,所有走的是onPause—onStop —onDestoryView —onDestory —onDetach俺祠。這就是他們的區(qū)別 一個(gè)摧毀view視圖,一個(gè)摧毀整個(gè)fragment。不帶state的adapter會(huì)吧所有的Fragmetn都加載到內(nèi)存中蜘渣,而帶state的只會(huì)加載預(yù)加載的幾個(gè)界面淌铐,所以?xún)?nèi)存消耗小,但是每次都要重新去創(chuàng)建view視圖蔫缸,也就是要從新走了attach 到onResume腿准,這個(gè)會(huì)需比較耗時(shí)間