生命周期
起因:一直沒搞清Fragment生命周期調(diào)用時機辣往,默認(rèn)為fragment可見時就調(diào)用onResume,不可見就調(diào)用onPause, 實際上除單獨出棧的fragment外抛猖,頁面中已存的Fragment生命周期都和Activity保持同步迅脐。
For example:Activity 中連續(xù)add fragmentA , fragmentB ,當(dāng)fragmentB出棧喜每,頁面只展示fragmentA的時候并不會調(diào)用A的onResume方法
getSupportFragmentManager().beginTransaction().add(R.id.fragmentA, new FragmentA()).commit();
//操作入棧枪眉,按返回鍵時痪宰,就將操作出棧
getSupportFragmentManager().beginTransaction().add(R.id.fragmentB, new FragmentB()).addToBackStack("").commit();
//B出棧:
getFragmentManager().popBackStack();
生命周期:
D/test: FragmentA onCreate
D/test: FragmentA onCreateView
D/test: FragmentB onCreate
D/test: FragmentB onCreateView
D/test: FragmentA onResume
D/test: FragmentB onResume
//B出棧椅邓,A一直是可見狀態(tài),所以不會再調(diào)用A的生命周期
D/test: FragmentB onPause
D/test: FragmentB onDestroyView
D/test: FragmentB onDestroy
//按home鍵
D/test: FragmentA onPause
D/test: FragmentB onPause
//從home鍵返回
D/test: FragmentA onResume
D/test: FragmentB onResume
addToBackStack作用:
如果addFragmentB時不加addToBackStack青瀑,那么按返回鍵會將Activity直接返回璧亮;加了之后按返回鍵 會將B出棧,只調(diào)用FragmentB的 pause,destroy斥难,Activity不會返回枝嘶。
只要在Activity中存在的fragment,當(dāng)調(diào)用Activity生命周期的同時哑诊,也會調(diào)用其中所有fragment的生命周期群扶,不管fragment是不是真正可見。舉例:fragmentB 覆蓋在fragmentA之上(容器是FrameLayout)镀裤,當(dāng)按home鍵時會同時調(diào)用A和B 的onPause(),回來時調(diào)用調(diào)用A和B 的onResume().