Fragment在不同情况下的生命周期
来源:互联网 发布:火星时代 知乎 编辑:程序博客网 时间:2024/05/13 13:22
之前一直对Fragment的生命周期很疑惑,虽然很多文章都介绍过Fragment完整的生命周期,但在实际使用中,不同情况下Fragment各个生命周期方法的调用规律都不一样,比如在ViewPager中切换Fragment,所调用的生命周期方法就跟想象的不太一样)所以最近研究了一下Fragment的生命周期,在这里总结一下。
首先按照惯例还是把下面两张图放在这里参考:
下面是不同情况下Fragment的生命周期:
1、Fragment在Activity中replace
新替换的Fragment:onAttach > onCreate > onCreateView > onViewCreated > onActivityCreated > onStart > onResume
被替换的Fragment:onPause > onStop > onDestroyView > onDestroy > onDetach
2、Fragment在Activity中replace,并addToBackStack
新替换的Fragment(没有在BackStack中):onAttach > onCreate > onCreateView > onViewCreated > onActivityCreated > onStart > onResume
新替换的Fragment(已经在BackStack中):onCreateView > onViewCreated > onActivityCreated > onStart > onResume
被替换的Fragment:onPause > onStop > onDestroyView
3、Fragment在ViewPager中切换
这里有很多种情况,我们先将切换前的的Fragment称为PreviousFragment,简称PF;切换后的Fragment称为NextFragment,简称NF;其他Fragment称为OtherFragment,简称OF。
(在ViewPager中setUserVisibleHint能反映出Fragment是否被切换到后台或前台,所以在这里也当作生命周期)
A、如果相关的Fragment没有被加载过:
NF: setUserVisibleHint(false) > onAttach > onCreate > setUserVisibleHint(true) > onCreateView > onViewCreated > onActivityCreated > onStart > onResume
OF跟NF相邻: setUserVisibleHint(false) > onAttach > onCreate > onCreateView > onViewCreated > onActivityCreated > onStart > onResume
B、如果相关的Fragment已经被加载过:
NF跟PF相邻 :setUserVisibleHint(true)
NF跟PF不相邻:setUserVisibleHint(true) > onCreateView > onViewCreated > onActivityCreated > onStart > onResume
PF跟NF相邻 :setUserVisibleHint(false)
PF跟NF不相邻:setUserVisibleHint(false) > onPause > onStop > onDestroyView
OF跟PF相邻:onPause > onStop > onDestroyView
OF跟NF相邻:onCreateView > onViewCreated > onActivityCreated > onStart > onResume
OF夹在PF和NF中间:不调用任何生命周期方法
C、如果重写了FragmentPagerAdapter的destroyItem方法,并且相关Fragment已经加载过:
则相互切换时只会调用setUserVisibleHint
4、Fragment进入了运行状态:
Fragment在上述的各种情况下进入了onResume后,则进入了运行状态,以下4个生命周期方法将跟随所属的Activity一起被调用:
onPause > onStop > onStart > onResume
5、关于Fragment的onActivityResult方法:
使用Fragment的startActivity方法时,FragmentActivity的onActivityResult方法会回调相应的Fragment的onActivityResult方法,所以在重写FragmentActivity的onActivityResult方法时,注意调super.onActivityResult。
- Fragment在不同情况下的生命周期
- Fragment在不同情况下的生命周期
- Fragment 在各种情况下的生命周期
- Fragment在不同情况下的显示和隐藏的控制(在已有缓存,生命周期不走的情况下)
- 一道面试题:两个Fragment在replace/add 和 hide/show不同情况下来回跳转生命周期的变化
- Fragment在不同场景中生命周期的问题
- Fragment不同操作的生命周期
- Fragment不同操作的生命周期
- 在ViewPager中的Fragment在各种状态下的生命周期
- Android开发:Fragment不同操作的生命周期
- Android开发:Fragment不同操作的生命周期
- Android开发:Fragment不同操作的生命周期
- Android开发:Fragment不同操作的生命周期
- Android开发:Fragment不同操作的生命周期
- Android开发:Fragment不同操作的生命周期
- Android开发:Fragment不同操作的生命周期
- 【安卓笔记】成长第一步,Activity在正常情况下与异常情况下的生命周期
- CString转string在unicode的情况下方法不同
- pl/sql中光标cursor的使用笔记
- fio
- 04-goto.void.extern.sizeof
- Windows下编译CAFFE,status == CUDNN_STATUS_SUCCESS,关闭CUDNN
- jar包Proguard混淆方法
- Fragment在不同情况下的生命周期
- MyEclipse Servers视窗出现“Could not create the view: An unexpected exception was thrown”错误解决办法
- 我眼中的下拉刷新
- 05-const.volatile
- Linux电源管理_Generic PowerManager 之Suspend功能--(一)
- android源代码
- OpenRPG横版格斗RPG(Demo)
- js splice 用法小结
- MySQL数据库插入速度调整