使用FragmentPagerAdapter时Fragment的生命周期

FragmentPagerAdapter 会保存在内存中保存Fragment的实例,当ViewPagerFragment的数量较多时,建议使用FragmentStatePagerAdapter

当使用FragmentPagerAdapter时Fragment的生命周期怎么走呢?(使用的是v4包下的Fragment)

当viewpager加载时,会加载当前页跟相邻页的fragment(如果有),那么此时,Fragment的log日志是这样的

I/fragment: onAttach:
I/fragment: onCreate:
I/fragment: onAttach:
I/fragment: onCreate:
I/fragment: onCreateView: +position 1
I/fragment: onActivityCreated: +position 1
I/fragment: onCreateView: +position 0
I/fragment: onActivityCreated: +position 0
I/fragment: onStart: 0
I/fragment: onResume: 0
I/fragment: onStart: 1
I/fragment: onResume: 1

我们看到,有两个Fragment的生命周期都走了,而他们基本上算是交替执行的。那么当我们滑动到第三个页面再划回第一个页面呢?生命周期又会怎么走?
肯定的第三个页面和第四个页面的onAttachonCreate,onCreateView,onActivityCreate,onStart,onResume生命周期都会执行。那么顺序是怎么样的呢?我们来看下log日志。

//以下是滑动到Fragment3时走的的生命周期
I/fragment: onAttach:
I/fragment: onCreate:
I/fragment: onCreateView: +position 2
I/fragment: onActivityCreated: 2
I/fragment: onStart: 2
I/fragment: onResume: 2I/fragment: onAttach:
I/fragment: onCreate: I/fragment: onPause: 0
I/fragment: onStop: 0
I/fragment: onDestroyView: 0I/fragment: onCreateView: +position 3
I/fragment: onActivityCreated: 3
I/fragment: onStart: 3
I/fragment: onResume: 3//以下是滑动到fragment0的
I/fragment: onCreateView: +position 0
I/fragment: onActivityCreated: 0
I/fragment: onPause: 3
I/fragment: onStop: 3
I/fragment: onDestroyView: 3
I/fragment: onStart: 0
I/fragment: onResume: 0
I/fragment: onPause: 2
I/fragment: onStop: 2
I/fragment: onDestroyView: 2

我们发现Fragment2的生命周期先走到了onResume,之后Fragment0走到了onDestoryView中,而当我们重新滑到Fragment0的时候,Fragment0的生命周期是从onCreateView开始走的,并没有走onCreate方法。

使用FragmentStatePagerAdapter时Fragment的生命周期

当使用FragmentStatePagerAdapter时,第一次走的生命周期跟FragmentPagerAdapter是一样的。但是当我们滑动到第三个Fragment(即:Fragment 2)再划回第一个Fragment(Fragment 0)呢?
生命周期如下:

I/fragment: onAttach:
I/fragment: onCreate:
I/fragment: onCreateView: +position 2
I/fragment: onActivityCreated: 2
I/fragment: onStart: 2
I/fragment: onResume: 2I/fragment: onAttach:
I/fragment: onCreate: I/fragment: onPause: 0
I/fragment: onStop: 0
I/fragment: onDestroyView: 0
I/fragment: onDestroy: 0
I/fragment: onDetach: 0I/fragment: onCreateView: +position 3
I/fragment: onActivityCreated: 3
I/fragment: onStart: 3
I/fragment: onResume: 3
I/fragment: onAttach:
I/fragment: onCreate:
I/fragment: onPause: 3
I/fragment: onStop: 3
I/fragment: onDestroyView: 3
I/fragment: onDestroy: 3
I/fragment: onDetach: 3I/fragment: onCreateView: +position 0
I/fragment: onActivityCreated: 0
I/fragment: onStart: 0
I/fragment: onResume: 0I/fragment: onPause: 2
I/fragment: onStop: 2
I/fragment: onDestroyView: 2
I/fragment: onDestroy: 2
I/fragment: onDetach: 2

我们可以看到,当我们滑动到第三个Fragment(Fragment 2)时,第一个Fragment(Fragment 0)的生命周期已经走到了onDetach,此时Fragment0已经和activity解绑。也就不会在内存中保存Fragment的实例。

分析

通过上面的Fragment的生命周期我们可以看到,当ViewPager使用FragmentPagerAdapter时滑动viewpager,Fragment并不会跟acvitity解绑,并且划回该Fragment时,onCreate方法也不会执行。FragmentStatePagerAdapter时,Fragment已经跟activity解绑了,重新划回该Fragment时,Fragment的生命周期会全部走一遍。

因此当我们在Fragment的onCreate方法中执行的网络请求,那么在FragmentPagerAdapter中,该网络请求只会执行一次,而FragmentStatePagerAdapter则会每次都得到执行。

使用FragmentPagerAdapter和FragmentStatePagerAdapter时Fragment生命周期区别相关推荐

  1. 关于FragmentManager动态管理Fragment时Fragment生命周期的探究

    Fragment是Android中的重要组件,在Android 3.0的时候添加进来. 关于Fragment的生命周期,我相信了解过的开发人员都应该把以下方法脱口而出:onAttach, onCrea ...

  2. Android应用开发—ViewPager FragmentPagerAdapter和FragmentStatePagerAdapter下Fragment的生命周期

    ViewPager配合不同的PagerAdapter,对应Fragment的生命周期有着不同的表现,了解这个生命周期机制对于开发者选择合适的PagerAdapter实现不同的效果,有着很大的帮助. F ...

  3. ViewPager两种适配器显示Fragment时的生命周期探究

    viewpager可以用来实现多个Fragment显示并可左右滑动的功能.ViewPager有两种不同的适配器来显示Fragment,下面将分别探讨这两种显示方式Fragment的生命周期变化有何不同 ...

  4. android viewpager fragment 生命周期,ViewPager中Fragment的生命周期

    网上有很多Fragment生命周期的帖子,但是看了一下,没有找到自己想了解的东西,于是决定自己动手体验一下这个生命周期.主要想了解以下几个问题: Activity中的Fragment的生命周期 Vie ...

  5. Lifecycle Activity和Fragment生命周期感知组件 LifecycleObserver MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  6. Fragment生命周期详解

    关于Fragment的生命周期,博主写过Activity与Fragment生命周期详解,基本上把Fragment的生命周期详细介绍过,但是那仅仅是创建一个Fragmnet时的生命周期,而事实上Frag ...

  7. 对Fragment生命周期的理解以及其与Activity的关联

    Fragment生命周期的四种状态 Fragment和Activity类似,也存在运行状态.暂停状态.停止状态和销毁状态. 运行状态:当前Fragment位于前台展示,可见,可获取焦点. 暂停状态:其 ...

  8. Fragment 生命周期的详情

    Fragment每个生命周期方法的意义.作用(注意红色的不是生命周期方法): setUserVisibleHint():设置Fragment可见或者不可见时会调用此方法.在该方法里面可以通过调用get ...

  9. Fragment 生命周期:

    Fragment每个生命周期方法的意义.作用(注意红色的不是生命周期方法): setUserVisibleHint():设置Fragment可见或者不可见时会调用此方法.在该方法里面可以通过调用get ...

最新文章

  1. 干货 | 一文搞懂极大似然估计
  2. HTML标记语法总结
  3. 百练OJ:1835:宇航员
  4. java——File类常用方法
  5. Eclipse安装STS(Spring Tool Suite (STS) for Eclipse)插件
  6. 韩顺平php视频笔记51-52 数组的概念 创建 遍历
  7. WM6.5中隐藏和显示任务栏、命令栏及输入面板
  8. linq to entity 错误 1 错误 75: 类型 视图名称 的键部分 “主键的列名1”无效。该键的所有部分都必须不可以为 null。(转)...
  9. maven创建java,Maven创建Java项目
  10. 最新发布!《统计学习方法》第二版无监督学习视频课上线了!
  11. 如何对应紧急依赖过来的作业,要有自己的原则
  12. javascript 实现页面加载完再显示页面
  13. 素材解析程序源代码,用thinkphp开发的 支持12大网站,其他需要定制
  14. 打印机喷嘴清洗必杀武器
  15. centos7 yum安装时遇到错误:Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
  16. 下载堆糖图片-正则-xpath-BeautifulSoup-selenium-python爬虫
  17. pythonmath库阶乘函数_Python--math库
  18. USB转换PS2接线原理
  19. matlab中tdma源程序,40MF-TDMA系统中多用户多业务的无线接入控制和时隙分配算法MATLAB源代码...
  20. C# 复制Word(复制全部内容、部分内容、页眉页脚)

热门文章

  1. POJ-2488 A Knights Journey-深度优先搜索DFS
  2. MongoDB,分组,聚合
  3. angularJs中datatable实现
  4. 【EMC】电压暂降、短时中断和电压变化
  5. postfix邮件系统之邮件客户端无法收邮件问题解析
  6. 适应关键业务环境的加湿系统
  7. 快速向表中插入大量数据Oracle中append与Nologgin的作用
  8. 503小组第三章编程作业
  9. webapi 重复提交问题
  10. UWP 实现分享功能