網(wǎng)上有很多Fragment生命周期的帖子岩榆,但是看了一下强岸,沒有找到自己想了解的東西漩仙,于是決定自己動手體驗一下這個生命周期扰她。主要想了解以下幾個問題:
- Activity中的Fragment的生命周期
- ViewPager中Frament的生命周期
- Fragment中Fragment的生命周期
Activity中Fragment的生命周期
在Activity中創(chuàng)建一個FrameLayout踊兜,一個Button用于切換FrameLayout中的Fragment:
程序運(yùn)行時打印的log:
這里注意到當(dāng)Activity中Start(由不見變?yōu)榭梢姡┱{(diào)用后竿滨,F(xiàn)ragment的onActivityCreated才會被調(diào)用。
當(dāng)點擊Button時的log:
可以看出捏境,第二個Fragment先和Activity建立關(guān)聯(lián),并且Create,等到第一個Fragment消失時于游,第二個Fragment才createView,也就是加載Fragment的布局垫言,然后調(diào)用onActivityCreated贰剥,在這里第二個Fragment關(guān)聯(lián)的Activity已經(jīng)創(chuàng)建好了的,但是系統(tǒng)還是會調(diào)用這個方法一次筷频,確保與Fragment關(guān)聯(lián)的Activity是創(chuàng)建好了的蚌成。,
點擊back按鈕時的log:
可以看出Activity先于Fragment銷毀截驮。
ViewPager中Fragment的生命周期
這次直接在根布局中放了一個ViewPager笑陈,adapter繼承的FragmentPagerAdapter:
程序啟動時的Log:
可以看到,MainAcitivity按照常規(guī)順序調(diào)用后,F(xiàn)irstFragment和SecondFragment先后調(diào)用了onAttach和onCreate實例化了Fragment,并且在FirstFragment調(diào)用onResume之后葵袭,SecondFragment也調(diào)用了onResume涵妥,也就是是說SecondFragment已經(jīng)加載好了,隨時準(zhǔn)備變?yōu)榭梢娖挛酉聛砘瑒拥絊econdFragment,可以看到:
沒錯蓬网,和我心里想的一樣窒所,加載的是第三個Fragment,嗯,心里應(yīng)該明白FragmentPagerAdapter這樣做的目的帆锋,然后再滑到第三個Fragment吵取,可以看到:
第一個Fragment已經(jīng)DestroyView了,F(xiàn)ragmentPagerAdapter默認(rèn)的是會加載前后兩個pager,這次在程序啟動時調(diào)用pager的setCurrentItem(1)方法锯厢,嗯皮官,心里面已經(jīng)知道會輸出什么了,來驗證一下实辑,:
輸出了這么多剪撬,和心里想的一樣残黑,第一個pager里的Fragment和第二個pager里的Fragment都已經(jīng)加載了馍佑。
我在這里的理解是onResume()調(diào)用后,不一樣像網(wǎng)上講得那樣穷劈,一定會從不可見變得可見歇终,有可能是把自己加載到了內(nèi)存评凝,隨時準(zhǔn)備著和用戶交互奕短。
Fragment中Fragment的生命周期
應(yīng)該說成Fragment中的Viewpager中的Fragment的生命周期翎碑,這次將Viewpager放到一個FirstFragment中日杈,Viewpager包含secondfragment和ThirdFragment莉擒,看看會有什么輸出:
沒有什么意外的填硕,和想的一樣扁眯,相當(dāng)于前面兩個主題內(nèi)容的結(jié)合。
如果有什么說的不對的,希望大家指出來狭莱,謝謝.