1崖面、我們先看看整體的生命周期流程
2恶导、從一個(gè)Activity中的OnCreate和onStart中直接加載一個(gè)Fragment
首先調(diào)用Activity的onCreate和onStart瓜客,然后Fragment會(huì)連續(xù)的從onAttach到onStart戏溺,然后調(diào)用Activity的onResume钉稍,最后是Fragment的onResume撇眯。
** 值得注意的是Fragment的onSart方法可能是在Fragment的onSart方法之前被調(diào)用报嵌,而且Fragment從onAttach到onStart是一個(gè)連續(xù)的執(zhí)行虱咧。
3、Add
add一個(gè)Fragment的時(shí)候不管之前是否有其他的Fragment沪蓬,其他的Fragment是以什么方式加進(jìn)去的彤钟,都會(huì)從onAttach方法開(kāi)始走到onResume
onAttach -->?onCreate -->?onCreateView -->?onActivityCreated -->??onStart --> onResume
4、Replace
如果之前沒(méi)有Fragment 直接Replace 相當(dāng)于Add
onAttach -->?onCreate -->?onCreateView -->?onActivityCreated -->??onStart --> onResume
如果之前有一個(gè)Fragment? A 跷叉,然后現(xiàn)在要 B replace A
B:?onAttach -->?onCreate? ?
A:?onPause -->?onStop -->??onDestroyView --> onDestory --> onDetach? (onDestory逸雹、onDetach取決于A是否有添加到回退棧)
B:?onCreateView -->?onActivityCreated -->??onStart --> onResume
5、Remove
當(dāng)remove一個(gè)fragment的時(shí)候云挟,它的生命周期跟是否添加到回退棧(addToBackStack)有關(guān)系梆砸。如果Fragment被添加到回退棧中的話,銷毀時(shí)只會(huì)銷毀View园欣,生命周期走到onDestroyView帖世,不會(huì)把整個(gè)Fragment銷毀,跟Activity斷開(kāi)關(guān)聯(lián)
onPause -->?onStop -->??onDestroyView -->?onDestory -->?onDetach? (onDestory沸枯、onDetach取決于A是否有添加到回退棧)
6日矫、Hide和Show
通過(guò)?hide()?、?show()?來(lái)隱藏绑榴、顯示Fragment哪轿,此時(shí) Fragment 只改變了可見(jiàn)性,并不涉及生命周期的改變
7翔怎、四種提交事務(wù)的方式?
commit窃诉、commitNow、commitAllowingStateLoss赤套、commitNowAllowingStateLoss
commit 是異步操作飘痛,會(huì)將任務(wù)提交給主線程,
commitNow 會(huì)立即執(zhí)行事務(wù)
commitAllowingStateLoss 和 commit的區(qū)別就是:commit如果在onSaveInstanceState之后提交會(huì)拋出IllegalStateException(無(wú)效狀態(tài)異常)
狀態(tài)的丟掉容握,指的是可能丟掉FragmentManager狀態(tài), 即onSaveInstanceState之后任何被添加或被移除的Fragments.