Activity和Fragment的生命周期详解

Activity的生命周期

  1. onCreate():它会在活动第一次被创建的时候调用(应该在这个方法中完成活动的初始化操作,比如加载布局,绑定事件)

  2. onSart():活动由不可见变为可见的时候调用,只是还没有在前台显示,因此无法与用户进行交互;

  3. onResume():活动是可见的准备好和用户进行交互的时候调用;此时活动一定位于返回栈的栈顶,并处于运行状态;onResume()与onStart()的相同点是两者都表示Activity可见,只不过onStart回调时Activity还是后台无法与用户交互,而onResume则已显示在前台,可与用户交互;从流程图,我们也可以看出当活动停止后(onPause()和onStop()被调用),重新回到前台时也会调用onResume(),因此我们也可以在onResume()中初始化一些资源,比如重新初始化在onPause()或者onStop()方法中释放的资源

  4. onPause():系统准备去启动或恢复另一个活动的时候调用;通常会在这个方法中将一些消耗CPU的资源释放,及保存一些关键的数据;但这个方法的执行速度一定要快,否则会影响新的栈顶Activity的使用

  5. onStop():活动完全不可见的时候调用;和onPause()方法区别在于如果启动的新活动是一个对话框式的活动,那么onPause()方法得到执行,而onStop()方法并不会执行

  6. onDestror():活动被销毁前调用,之后的活动状态变为销毁状态;此时活动正在被销毁,也是生命周期最后一个执行的方法,我们可以在此方法中做一些回收工作和最终的资源释放

  7. onRestart():在活动由停止状态变为运行状态前调用;也就是活动被重新启动了;一般是用户打开了一个新的Activity时,当前的Activity就会被暂停(onPause()和onStop()被执行了),接着又回到当前Activity页面时,onRestart()就会被回调
    在这里插入图片描述

Fragment的生命周期

  1. onAttach():当Fragment与Activity发生关联时调用;初始化fragment参数可以从getArguments()获得,但是,当Fragment附加到Activity之后,就无法再调用setArguments()。所以除了在最开始时,其它时间都无法向初始化参数添加内容。

  2. onCreate():初次创建fragment时调用,经历暂停或停止状态继而恢复后,想保留Fragment的基本组件,则在此进行初始化;此时的Activity还没有创建完成,因为我们的Fragment也是Activity创建的一部分。所以如果你想在这里使用Activity中的一些资源,将会获取不到。比如:获取同一个Activity中其它Frament的控件实例。如果想要获得Activity相关联的资源,必须在onActivityCreated中获取。

  3. onCreateView():首次绘制页面时候调用,在此可以创建View,也可以返回null,这样不建议耗时操作。

  4. onActivityCreated():Fragment绑定Activity,在Activity的OnCreate()结束后,会调用此方法;所以到这里的时候,Activity已经创建完成;在这个函数中才可以使用Activity的所有资源;在该方法内可以进行与Activity交互的UI操作,不能在此之前跟Activity进行交互。

  5. onStart():启动 Fragment 时被回调,此时Fragment可见,只是还没有在前台显示,因此无法与用户进行交互;这是Fragment与用户交互之前的最后一个调用;在生命周期中也可以看到Fragment的OnStart()过程与Activity的OnStart()过程是绑定的

  6. onResume():Fragment在前台可见,处于活动状态,用户可与之交互;Fragment的OnResume与Activity的OnResume是相互绑定的,它依赖于包含它的activity的Activity.onResume。

  7. onPause():Fragment处于暂停状态,但依然可见,用户不能与之交互;此回调与Activity的OnPause()相绑定,与Activity的OnPause()意义一样

  8. onStop():停止Fragment时调用,Fragment完全不可见;Fragment的onStop()与Activity的OnStop()相绑定,意义一样。已停止的Fragment可以直接返回到OnStart()回调,然后调用OnResume()

  9. onDestoryView():销毁与Fragment有关的视图,但未与Activity解除绑定;如果Fragment即将被结束或保存,那么撤销方向上的下一个回调将是onDestoryView()。会将在onCreateView创建的视图与这个fragment分离。下次这个fragment若要显示,那么将会创建新视图。这会在onStop之后和onDestroy之前调用。这个方法的调用同onCreateView是否返回非null视图无关。它会潜在的在这个视图状态被保存之后以及它被它的父视图回收之前调用。

  10. onDestory:销毁 Fragment 时被回调,通常按Back键退出或者Fragment被回收时调用此方法,此后接onDetach;需要注意的是,它即使经过了onDestroy()阶段,但仍然能从Activity中找到,因为它还没有Detach

  11. onDetach:与onAttach相对应,Fragment生命周期中最后一个回调是onDetach();调用它以后,Fragment就不再与Activity相绑定,它也不再拥有视图层次结构,它的所有资源都将被释放

在这里插入图片描述

Fragment的 setUserVisibleHint()方法和getUserVisibleHint()方法

setUserVisibleHint():设置Fragment可见或者不可见;setUserVisibleHint() 在 上图所示fragment所有生命周期之前
getUserVisibleHint():获得Fragment的可见或不可见状态,如果可见则进行懒加载操作;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值