Fragment的生命周期及詳解

先來(lái)一副Fragment生命周期的圖解:
Fragment生命周期

OnAttach()

作用:幫助Fragment與Activity進(jìn)行交互。
Activity傳入Fragment:

public void onAttach(Activity activity) {
    super.onAttach(activity);
    titles = ((MainActivity) activity).getTitles();//通過(guò)強(qiáng)轉(zhuǎn)成宿主activity疯趟,就可以獲取到傳遞過(guò)來(lái)的數(shù)據(jù)
}

Fragment把值傳遞給Activity,可以時(shí)候接口回調(diào)。
1)在Fragment中定義接口拷姿。
2)在Activity中實(shí)現(xiàn)接口蜗帜。
3)在OnAttach中獲取Activity實(shí)例献汗,然后調(diào)用實(shí)現(xiàn)了的接口。

兩個(gè)Fragment通信王污,通常為兩個(gè)Fragment都綁定同一個(gè)Activity罢吃,可以使用Activity作為中介。

onCreate()

系統(tǒng)創(chuàng)建fragment的時(shí)候回調(diào)他昭齐,可以在其中初始化除了view之外的東西尿招,例如實(shí)例化一些變量
通常這些變量是當(dāng)Fragment暫停或停止時(shí)需要保存的變量阱驾。
如果我們要為Fragment啟動(dòng)一個(gè)后臺(tái)線程就谜,可以考慮將代碼放于此處。
參數(shù)是:Bundle savedInstance, 用于保存 Fragment 參數(shù), Fragement 也可以 重寫(xiě) onSaveInstanceState(BundleoutState) 方法, 保存Fragement狀態(tài);
可以用于 文件保護(hù)
他只調(diào)用一次里覆。

onCreateView()

第一次使用的時(shí)候 fragment會(huì)在這上面畫(huà)一個(gè)layout出來(lái)丧荐, 為了可以畫(huà)控件 要返回一個(gè) 布局的view,也可以返回null喧枷。
當(dāng)系統(tǒng)用到fragment的時(shí)候 fragment就要返回他的view虹统,越快越好 ,所以盡量在這里不要做耗時(shí)操作隧甚,比如從數(shù)據(jù)庫(kù)加載大量數(shù)據(jù)顯示listview车荔,
當(dāng)然線程還是可以的。
給當(dāng)前的fragment繪制ui布局戚扳,可以使用線程更新UI忧便,說(shuō)白了就是加載fragment的布局的。
這里一般都先判斷是否為null帽借。

if(text==null){
      Bundle args=getArguments();
      text=args.getString("text");
    }
    if (view == null) {
      view = inflater.inflate(R.layout.hello, null);
    }

onActivityCreated()

當(dāng)Activity中的onCreate方法執(zhí)行完后調(diào)用珠增。
注意了:
從這句官方的話可以看出:當(dāng)執(zhí)行onActivityCreated()的時(shí)候 activity的
onCreate才剛完成。
所以在onActivityCreated()調(diào)用之前 activity的onCreate可能還沒(méi)有完成宜雀,
所以不能再onCreateView()中進(jìn)行 與activity有交互的UI操作切平,UI交互操作可以在onActivityCreated()里面進(jìn)行。
所以呢:這個(gè)方法主要是初始化那些你需要你的父Activity或者Fragment的UI已經(jīng)被完
整初始化才能初始化的元素辐董。
如果在onCreateView里面初始化空間 會(huì)慢很多悴品,比如listview等。

onStart()

和activity一致简烘,啟動(dòng)Fragement 啟動(dòng)時(shí)回調(diào),苔严,此時(shí)Fragement可見(jiàn)。

onResume()

和activity一致 在activity中運(yùn)行是可見(jiàn)的孤澎。激活, Fragement 進(jìn)入前臺(tái), 可獲取焦點(diǎn)時(shí)激活届氢。

onPause()

和activity一致 其他的activity獲得焦點(diǎn),這個(gè)仍然可見(jiàn)
第一次調(diào)用的時(shí)候覆旭,指的是 用戶 離開(kāi)這個(gè)fragment(并不是被銷(xiāo)毀)
通常用于 用戶的提交(可能用戶離開(kāi)后不會(huì)回來(lái)了)

onStop()

和activity一致退子, fragment不可見(jiàn)的岖妄, 可能情況:activity被stopped了OR fragment被移除但被,加入到回退棧中寂祥,一個(gè)stopped的fragment仍然是活著的如果長(zhǎng)時(shí)間不用也會(huì)被移除荐虐。

onDestroyView()

Fragment中的布局被移除時(shí)調(diào)用。
表示fragemnt銷(xiāo)毀相關(guān)聯(lián)的UI布局丸凭, 清除所有跟視圖相關(guān)的資源福扬。
以前以為這里沒(méi)什么用處其實(shí) 大有文章可做,
相信大家都用過(guò)ViewPager+Fragment惜犀,由于ViewPager的緩存機(jī)制铛碑,每次都會(huì)加載3
頁(yè)。
例如:有四個(gè) fragment 當(dāng)滑動(dòng)到第四頁(yè)的時(shí)候 第一頁(yè)執(zhí)行onDestroyView(),但沒(méi)有
執(zhí)行onDestroy虽界。他依然和activity關(guān)聯(lián)汽烦。當(dāng)在滑動(dòng)到第一頁(yè)的時(shí)候又執(zhí)行了
onCreateView()。 生命周期可以自己試一下浓恳。
那么問(wèn)題來(lái)了刹缝。會(huì)出現(xiàn)重復(fù)加載view的局面,所以這么做(下面是先人的代碼)

@Override
  public void onDestroyView() {
    Log.i("onDestroyView_Fragment");
    if(view!=null){
            ((ViewGroup)view.getParent()).removeView(view);
    }
    super.onDestroyView();
  }

onDestroy()

銷(xiāo)毀fragment對(duì)象颈将, 跟activity類(lèi)似了梢夯。

onDetach()

Fragment和Activity解除關(guān)聯(lián)的時(shí)候調(diào)用。 脫離activity晴圾。

參考文章
Android的Fragment的生命周期各狀態(tài)和回調(diào)函數(shù)使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末颂砸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子死姚,更是在濱河造成了極大的恐慌人乓,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件都毒,死亡現(xiàn)場(chǎng)離奇詭異色罚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)账劲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)戳护,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瀑焦,你說(shuō)我怎么就攤上這事腌且。” “怎么了榛瓮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵铺董,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我禀晓,道長(zhǎng)精续,這世上最難降的妖魔是什么坝锰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮驻右,結(jié)果婚禮上什黑,老公的妹妹穿的比我還像新娘崎淳。我一直安慰自己堪夭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布拣凹。 她就那樣靜靜地躺著森爽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嚣镜。 梳的紋絲不亂的頭發(fā)上爬迟,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音菊匿,去河邊找鬼付呕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛跌捆,可吹牛的內(nèi)容都是我干的徽职。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼佩厚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼姆钉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起抄瓦,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤潮瓶,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后钙姊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體毯辅,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年煞额,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了思恐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡立镶,死狀恐怖壁袄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情媚媒,我是刑警寧澤嗜逻,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站缭召,受9級(jí)特大地震影響栈顷,放射性物質(zhì)發(fā)生泄漏逆日。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一萄凤、第九天 我趴在偏房一處隱蔽的房頂上張望室抽。 院中可真熱鬧,春花似錦靡努、人聲如沸坪圾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)兽泄。三九已至,卻和暖如春漾月,著一層夾襖步出監(jiān)牢的瞬間病梢,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工梁肿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜓陌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓吩蔑,卻偏偏與公主長(zhǎng)得像钮热,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哥纫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Fragment是什么 說(shuō)了半天的Fragment霉旗,也看到這么多次Fragment這個(gè)名詞出現(xiàn),那么Fragmen...
    October5閱讀 8,239評(píng)論 0 8
  • Fragment 描述: ??翻譯可以譯為:碎片蛀骇、片段,Android 3.0開(kāi)始引入fragments 的概念厌秒;...
    Lost_Robot閱讀 1,682評(píng)論 0 11
  • Fragment要點(diǎn) 1、Fragment作為Activity界面的一部分組成出現(xiàn) 2擅憔、可以在一個(gè)Activity...
    玉圣閱讀 1,221評(píng)論 0 16
  • 我是董董暑诸,說(shuō)不定懂你蚌讼。 我認(rèn)識(shí)的一個(gè)姑娘失戀了,對(duì)方只是發(fā)來(lái)一封簡(jiǎn)單冷漠的短信个榕,“我覺(jué)得我們應(yīng)該更適合做朋友”說(shuō)明...
    董鷙閱讀 382評(píng)論 0 1
  • 我很想你 后來(lái) 我終于在別人的照片上見(jiàn)到了你的樣子 時(shí)隔經(jīng)年 你居然陌生成那么遙遠(yuǎn)的模樣 恍然間發(fā)覺(jué)篡石,我好像沒(méi)有多...
    少年羅伊閱讀 117評(píng)論 0 1