一、Fragment 生命周期中的每个方法的意义与作用:

1.setUserVisibleHint()(此方法不属于生命周期方法):设置Fragment 用户可见或不可见时调用此方法,此方法在Fragment所有生命周期执行之前执行。当Fragment 可见状态改变时,将调用此方法。

            获取Fragment的状态可见或不可见,通过调用getUserVisibleHint()方法获取。当Fragment是可见时则进行懒加载操作的。

            方法及参数:setUserVisibleHint(boolean isVisibleToUser)

(懒加载操作:只让用户看到的页面才会加载它需要展示的数据,即当Fragment可见时再进行数据加载,以提高效率)

2.onAttach():将Fragment 对象与Activity关联时,调用onAttach(Context ) 方法(方法onAttach(Activity)高版本已弃用,为兼容低版本用到,高版本适用),

调用此方法时,Fragment与Activity已完成绑定。

方法及参数:onAttacth(Context context)

3.onCreate():初始化Fragment,可通过savedInstanceState 获取之前保存的值。

方法及参数: onCreate(Bundle savedInstanceState)

4.onCreateView() :初始化Fragment布局,加载布局和findViewById操作通常在此方法中完成,单不建议执行耗时的操作,如获取数据库数据。

方法及参数:onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)

5.onActivityCreated():当Fragement 所在的Activity被启动完成后回调此方法,执行该方法时,与Fragment绑定的Activity的onCreate方法已经执行完成并返回,在该方法内可以进行与Activity交互的UI操作,

       所以在该方法之前Activity的onCreate方法并未执行完成,如果提前进行交互操作,会引发空指针异常。

方法及参数:onActivityCreated(Bundle savedInstanceState)

6.onStart():启动Fragment 时被回调,Fragment有不可见变为可见状态。此方法在Activity的onStart执行完立即执行,这个方法执行完Fragment界面就立即显示出来,但是还没有获取焦点,用户是不能操作的。

方法及参数:onStart()

7.onResume():调用onStart() 防范后面一定会调用此方法,恢复Fragment时回调,执行此方法时,Fragment处于活动状态,用户可与之交互。

方法及参数:onResume()

8.onPause():暂停Fragment,执行该方法时,Fragment处于暂停状态,但依然可见,用户不能与之交互。等同于Activity的Paused的状态,当Activity的onPause被调用时,Fragment的onPause同时被调用。

方法及参数:onPause()

9.onSaveInstanceState()(此方法不属于生命周期方法):保存当前Fragment的状态。该方法会自动保存Fragment的状态,比如EditText键入的文本,即使Fragment被回收又重新创建,一样能恢复EditText之前键入的文本。

10.onStop():执行该方法时,Fragment完全不可见,等同于Activity的Stopped状态,当Activity的onStop被调用时,Fragment的onStop()同时被调用。

方法及参数:onStop()

11.onDestory():销毁Fragment,通常按back键退出或者Fragment被回收时调用此方法。

方法及参数:onDestory()

12.onDetach():解除与Activity的绑定,在onDestory 方法之后调用。

方法及参数:onDetach()

二、Fragment生命周期执行流程:

1.Fragment 创建:setUserVisableHint() -> onAttach() ->onCreate() ->onCreateView() -> onActivityCreated() -> onStart() -> onResume()

2.Fragment变为不可见状态(锁屏、回到桌面、被Activity完全覆盖):onPause() -> onSaveInstanceState() -> onStop()

3.Fragment变为部分可见状态(打开Dialog样式的Activity):onPause() -> onSaveInstanceState()

4.Fragment由不可见变为活动状态:onStart() -> OnResume()

5.Fragment由部分可见变为活动状态:onResume()

6.退出应用:onPause()  -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()(注意退出不会调用onSaveInstanceState方法,因为是人为退出,没有必要再保存数据)

7.Fragment被回收又重新创建:被回收执行onPause() -> onSaveInstanceState() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()

8.重新创建执行:onAttach() -> onCreate() -> onCreateView() -> onActivityCreated() -> onStart() -> onResume() -> setUserVisibleHint()

9.横竖屏切换:与Fragment被回收又重新创建一样。

三、Fragment 执行hide、show生命周期执行:

当使用hide、show方法来控制Fragment使用时,Fragment生命周期将不执行,在onResume以及onPause方法处理的事情将由onHiddenChange进行管理,当Fragment调用hide隐藏时,

该方法会被调用,传入参数为true,表示该Fragment被隐藏了,当Fragment调用了show方法后,该方法传入的参数为false,表示该Fragment正在显示。

onHiddenChange 回调时机:

当使用add()+show()、hide()跳转到新的Fragment时,旧的Fragment回调 onHiddenChanged(),不会回调onStop()等生命周期方法,而新的Fragment在创建时是不会回调onHiddenChanged()。

  @Override
public void onHiddenChanged(boolen hidden){
super.onHiddenChanged(hidden);
if(hidden){//不在最前端界面显示,相当于调用了onPause() }else{//重新显示到最前端 ,相当于调用了onResume() //进行网络数据刷新 此处执行必须要在 Fragment与Activity绑定了 即需要添加判断是否完成绑定,否则将会报空(即非第一个显示出来的fragment,虽然onCreateView没有被调用,
//但是onHiddenChanged也会被调用,所以如果你尝试去获取活动的话,注意防止出现空指针) } }

下面是针对判断Fragment是否与Activity进行绑定做出相关修改:

public void onAttach(Context context) {
super.onAttach(context);
fragmentAndActivity++;//执行此方法 则说明会员Fragment 与Activity 绑定了, } public void onHiddenChanged(boolean hide){
super.onHiddenChanged(hide);
if(hide){ }
else if(hide==false&&fragmentAndActivity>0){
//进行网络数据刷新
} }

Fragment生命周期与Fragment执行hide、show后的生命周期探讨的更多相关文章

  1. Android系列之Fragment(二)----Fragment的生命周期和返回栈

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  2. Android之Fragment学习笔记②(Fragment生命周期)

    一. Fragment生命周期图                                  二.Fragment生命周期方法介绍 Fragment的生命周期和activity生命周期很像,其生 ...

  3. Fragment(四)Fragment生命周期分析(转)

    Fragment(四)Fragment生命周期分析 转载请注明:http://blog.csdn.net/liaoqianchuan00/article/details/24271607   例子一 ...

  4. 【Android基础】Fragment 详解之Fragment生命周期

    上一篇文章简单介绍了一下Fragment,这一篇文章会详细的说一下Fragment的生命周期和创建一个用户界面. Fragment的主要功能就是创建一个View,并且有一个生命周期来管理这个View的 ...

  5. Fragment重叠,使用show和hide控制显示和隐藏界面重叠问题;

    Fragment重叠原因: App因某种原因崩溃自动重启,或App长期在后台运行Fragment依赖的activity被回收等等原因:当系统内存不足,Fragment 的依附Activity 被回收的 ...

  6. jsp当做第二个servlet request的生命周期 请求 响应 不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束 request的域消失

    jsp当做第二个servlet  request的生命周期   请求 响应  不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束  request的域消失

  7. Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复

    Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状 ...

  8. 【Android基础】Fragment 详解之Fragment介绍

    Fragment在Android 3.0( API 11)引入,是为了支持在大屏上显示更加动态.灵活的UI,比如在平板和电视上.Fragment可以看作是嵌套的Activity,类似ActivityG ...

  9. Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

随机推荐

  1. SSH网上商城---使用ajax完成用户名是否存在异步校验

    小伙伴在上网的时候,需要下载或者观看某些视频资料,更或者是在逛淘宝的时候,我们都需要注册一个用户,当我们填写好各种信息,点击确定的时候,提示用户名已经存在,小编就想,为什么当我们填写完用户名的时候,她 ...

  2. android EventBus 3.0使用指南

    Enventbus的作用和好处我就不多说了,这里介绍下怎么使用. 2.+版本的使用方法 public void onEvent(MessageEvent event) { log(event.mess ...

  3. (八十)MapKit放置系统默认大头针和自定义大头针

    有关MapView的显示和定位在上一节已经说明,这一节说明如何在地图上放置大头针,以及设置点击大头针的视图. [系统默认大头针] mapView上放置大头针的方法是调用其addAnnotation:方 ...

  4. 【OpenCV文档】用于角点检测的Fast算法

    原文地址:http://docs.opencv.org/trunk/doc/py_tutorials/py_feature2d/py_fast/py_fast.html#fast-algorithm- ...

  5. android异步任务asyntask详解

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更 ...

  6. ROS_Kinetic_07 ROS中机器人三维物理引擎高保真仿真利器gazebo 7.0

    ROS_Kinetic_07 ROS中机器人三维物理引擎高保真仿真利器gazebo 7.0 ROS kinetic中的gazebo版本是7.0,有很多新的特性. 首先,启动gazebo: ~$ gaz ...

  7. SpriteBuilder复杂CCB在App场景加载时报错排查

    Player.CCB由body和arm两部分组成,它们都开启物理使能. 在GameScene.ccb中新建一个物理对象,将Player.ccb拖入该对象.此时编译运行App均正常. 然后继续添加其他物 ...

  8. iOS开发的10个知识点

    1.关于关键字volatile 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这 ...

  9. Leetcode_168_Excel Sheet Column Title

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42554641 Given a positive integ ...

  10. Errors running builder 'Integrated External Tool Builder' on project xxx

    出现这样的提示,表明你的项目的Builder项出了问题. 解决方法是: 右键项目选择"Properties",再选择"Builders",删除丢失的builde ...