Fragment生命周期,以及hide() show() replace() add() remove() addToBackStack(null)等对Fragment生命周期的影响

Fragment的生命周期

在这里插入图片描述

Fragment的生命周期如图所示,注意点:
在onAttach()方法回调的时候,说明Fragment已经附着到了Activity上,在onAttach方法中获取它所在的Activity对象并且保存为全局属性,以便后面的方法中使用,切记不要使用getActivity来获取它所在的activity对象,因为这个方法有的时候会返回为空,因为在某些情况下,Activity有可能被回收。

使用show() hide()方法来切换多个Fragment页面的时候,Fragment的生命周期

当我们在某个Activity中add了多个Fragment实例,切换不同的Fragment页面的时候,是通过show()和hide()方法来实现的,那么Fragment的生命周期方法是不会走的,只会走onHiddenChanged(boolean hidden)方法,我们可以通过这个方法来监听Fragment页面的显示和隐藏。
但是当我们点击home键,把整体页面切到后台的时候,宿主Activity和它里面的各个Fragment的onPause(),onStop()方法都会执行。我们再点击应用图标把应用当前页面且回到前台的时候,宿主Activity和它里面的各个Fragment的onStart()、onResume()方法都会执行。当然Activity的onRestart()方法也会执行。
假如当我按home键,把整体页面切到后台,我再点击应用图标,应用从后台切回到前台的时候,我只需要执行当前将要显示的Fragment的onResume()里面的逻辑,其他Fragment里面的onResume逻辑我不需要执行,因为它们还在后面隐藏着,那么我该怎么办呢,
所有的Fragment的方法加个这种判断即可
解决方案:

@Override
		public void onResume() {
			//判断当前Fragment是否处于显示状态
			if(isVisible()) {
			
  			}
		}

使用replace() 或者 add() remove() 方法来切换多个Fragment页面的时候,Fragment的生命周期

比如从Fragment1界面打开Fragment2界面

在这里插入图片描述

在这里插入图片描述

从log可以看出通过remove()和add()方法显示隐藏Fragment,被add进来的FragmentTwo的生命周期为onAttach、onCreate、onCreateView、onActivityCreated、onStart、onResume。
被remove掉的FragmentOne的生命周期为onPause、onStop、onDestroyView、onDestroy、onDetach
replace相当于add和remove两个方法一起作用的结果,所以结论和上面一样

当把隐藏(remove掉)的Fragment加入到回退栈中,对其生命周期有什么影响呢???

在这里插入图片描述

在这里插入图片描述

可以看到FragmentTwo的生命周期和之前没有变化,但是被加入回退栈中的FragmentOne的生命周期变为了onPause、onStop、onDestroyView。只是把Fragment的界面销毁了,Fragment实例并没有销毁。
按返回键

在这里插入图片描述

可以看到FragmentOne的生命周期为onCreateView、onStart、onResume
FragmentTow的生命周期为:onPause、onStop、onDestroyView、onDestroy、onDetach

因为replace是add和remove两个方法的一起使用所起的效果,和上面一样

如果以ViewPager的形式添加多个Fragment,滑动切换Fragment,那么Fragment切换的时候,生命周期也不会执行,onHiddenChanged也不会执行,可以通过setUserVisibleHint(boolean isVisibleToUser)方法监听Fragment页面的显示与隐藏。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值