Fragment

生命周期

起因:一直没搞清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().

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容