一、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. Android 优质精准的用户行为统计和日志打捞方案

    Android 自定义优质精准的用户行为和日志打捞方案 Tamic csdn博客 :http://blog.csdn.net/sk719887916/article/details/51398416 ...

  2. 安卓一键分享到qq,微信,微博,官方SDK非第三方

    当我们项目中需要集成分享功能时,我们通常会采取一下几个办法: 1.调用系统自带分享 优点:简单快速,几行代码搞定,不需添加任何额外包: 缺点:系统会调出手机内部所有带分享功能的APP,且界面风格跟随系 ...

  3. hashmap简单实例(个人使用经验)

    一.HashMap<int,String>是错误的:因为int是基本类型,而key和value要求是对象,所以要用Integer而不是int.HashMap<String,Objec ...

  4. Mybatis执行ReuseExecutor(五)

    ReuseExecutor顾名思义就是重复使用执行,其定义了一个Map<String, Statement>,将执行的sql作为key,将执行的Statement作为value保存,这样执 ...

  5. 1032. Sharing (25) -set运用

    题目如下: To store English words, one method is to use linked lists and store a word letter by letter. T ...

  6. pig的udf编写

    http://www.cnblogs.com/anny-1980/p/3673569.html http://blog.csdn.net/ruishenh/article/details/120480 ...

  7. TOMCAT数据源连接配置

    /* *本文档简单介绍系统使用TOMCAT6.0数据源方式连接数据库的配置方法: *1,系统环境:  gdczsam4.0 + Tomcat6.0 + JDK1.5 + SQL Server2008 ...

  8. Android项目-高考作文-抽象BaseAdapter

    1, 在使用baseAdapter的时候,总是有需要重复的代码如: @Override public int getCount() { return list.size(); } @Override ...

  9. iOS中 KVO 键值观察者

    KVO Key-Value-Obsever 键值观察者 1.首先要有一个观察者,此时被观察者是自己找一个观察者观察自己的key值对应的value值有没有改变,如果改变了就可以做一些响应的操作 创建一个 ...

  10. Linux多线程实践(9) --简单线程池的设计与实现

    线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源.在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收.所以 ...