生命周期
起因:一直没搞清Fragment生命周期调用时机,默认为fragment可见时就调用onResume,不可见就调用onPause, 实际上除单独出栈的fragment外,页面中已存的Fragment生命周期都和Activity保持同步。
For example:Activity 中连续add fragmentA , fragmentB ,当fragmentB出栈,页面只展示fragmentA的时候并不会调用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一直是可见状态,所以不会再调用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出栈,只调用FragmentB的 pause,destroy,Activity不会返回。
只要在Activity中存在的fragment,当调用Activity生命周期的同时,也会调用其中所有fragment的生命周期,不管fragment是不是真正可见。举例:fragmentB 覆盖在fragmentA之上(容器是FrameLayout),当按home键时会同时调用A和B 的onPause(),回来时调用调用A和B 的onResume().