寫這篇文章的目的僅僅是做個(gè)筆記搓扯,以供自己和大家參考检痰。
先復(fù)習(xí)一下Activity的生命周期
Paste_Image.png
1.Fragment介紹
Fragment當(dāng)成Activity的一個(gè)界面的一個(gè)組成部分,甚至Activity的界面可以完全有不同的Fragment組成锨推,更帥氣的是Fragment擁有自己的生命周期和接收铅歼、處理用戶的事件,這樣就不必在Activity寫一堆控件的事件處理的代碼了换可。更為重要的是椎椰,你可以動(dòng)態(tài)的添加、替換和移除某個(gè)Fragment沾鳄。
2.Fragment的生命周期
Fragment必須是依存與Activity而存在的俭识,因此Activity的生命周期會(huì)直接影響到Fragment的生命周期。網(wǎng)上很多圖洞渔,我就不畫了套媚,直接上圖,這張圖很好的說(shuō)明了Activity和Fragment生命周期的關(guān)系:
方法說(shuō)明
- onAttach():當(dāng)Fragment與Activity發(fā)生關(guān)聯(lián)時(shí)調(diào)用
- **onCreate() :創(chuàng)建fragment的時(shí)候回調(diào)他磁椒,在他里面實(shí)例化一些變量堤瘤,這些個(gè)變量主要是:當(dāng)你、暫停浆熔、停止的時(shí)候本辐,你想保持的數(shù)據(jù)
- onCreateView():繪制該Fragment的視圖,返回一個(gè)View医增。因此不要在這個(gè)方法中做太多耗時(shí)的操作慎皱。由于每次Fragment進(jìn)入后臺(tái)后要調(diào)用onDestoryView()方法,再次進(jìn)入前臺(tái)時(shí)會(huì)再次調(diào)用onCreateView方法叶骨,此時(shí)可利用if語(yǔ)句進(jìn)行一些變量初始化的判斷茫多,避免重復(fù)加載相同的UI,減少資源消耗
- onActivityCreated():當(dāng)Activity的onCreate方法執(zhí)行完后會(huì)調(diào)用此方法
- onStart():和Activity一致忽刽,F(xiàn)ragement啟動(dòng)時(shí)回調(diào)天揖,此時(shí)Fragement可見
- onResume():和Activity一致,在Activity中運(yùn)行是可見的跪帝,F(xiàn)ragement 進(jìn)入前臺(tái)今膊,可獲取焦點(diǎn)時(shí)激活
- onPause():和Activity一致,其他的Activity獲得焦點(diǎn)伞剑,這個(gè)仍然可見斑唬。第一次調(diào)用的時(shí)候,指的是用戶離開這個(gè)fragment(并不是被銷毀)
- onStop():和Activity一致黎泣,F(xiàn)ragment不可見恕刘。一個(gè)stopped的Fragment仍然是活著的如果長(zhǎng)時(shí)間不用也會(huì)被移除
- onDestoryView():當(dāng)該Fragment的視圖被移除時(shí)調(diào)用。銷毀相關(guān)的UI布局聘裁,清除資源雪营。此時(shí)需要注意,大家都用過(guò)ViewPager + Fragment衡便,由于ViewPager的緩存機(jī)制献起,每次都會(huì)加載3頁(yè),那么這時(shí)就會(huì)遇到Fragment重復(fù)加載的問(wèn)題镣陕。如果共有4頁(yè)Fragment谴餐,當(dāng)你滑到第4頁(yè)時(shí),第一頁(yè)的Fragment就會(huì)調(diào)用onDestoryView()銷毀UI呆抑,當(dāng)界面再次回到第一頁(yè)時(shí)會(huì)調(diào)用onCreateView()重新初始化UI
- onDetach():與onAttach相對(duì)應(yīng)岂嗓,當(dāng)Fragment與Activity關(guān)聯(lián)被取消時(shí)調(diào)用
熟悉一下整個(gè)流程