ViewPager 中 Fragment的生命周期 与 网络请求懒加载

ViewPager 中 Fragment的生命周期 与 网络请求懒加载

FragmentPagerAdapter VS FragmentStatePagerAdapter

  • FragmentPagerAdapter

Adapter 每页都是一个Fragment,并且所有的Fragment实例一直保存在Fragment manager中。所以它适用于少量固定的fragment,比如一组用于分页显示的标签。除了当Fragment不可见时,它的视图层有可能被销毁外,每页的Fragment都会被保存在内存中。

经过测试我们可以发现,当使用 FragmentPagerAdapter 的时候已经被创建的页面变为不可见的时候生命周期为:

onPause -> onStop -> onDestroyView

  • FragmentStatePagerAdapter

每页都是一个Fragment,当Fragment不被需要时(比如不可见),整个Fragment都会被销毁,除了saved state被保存外(保存下来的bundle用于恢复Fragment实例)。所以它适用于很多页的情况。

经过测试我们可以发现,当使用 FragmentPagerAdapter 的时候已经被创建的页面变为不可见的时候生命周期为:

onPause -> onStop -> onDestoryView -> onDestroy -> onDetach

可以看出当使用 FragmentStatePagerAdapter 的时候,不会保留不可见(不相邻的)页面在内存中,而是直接销毁了,等下次在可见(相邻页面可见)的时候再次创建。


FragmentPagerAdapter 中 Fragment 的生命周期( setUserVisibleHint 乱入)

我们知道 Fragment 生命周期函数有 :

setUserVisibleHint(乱入的不用在意我) -> onAttach —> onCreate -> onCreateView -> onActivityCreated -> onStart -> onResume -> onPause -> onStop -> onDestroyView -> onDetach -> onDestroy

Fragment 本身作为片段存在于 Activity中,当 Fragment 单独使用的时候其生命周期是伴随着 Activity 的生命周期的,即 Activity onResume 的时候 内部所有的 Fragment 也就走到了 onResume 这点初学者可能不会太在意,在这里作为题外话敲下黑板。

想要进一步了解的请参照: 与 Activity 生命周期协调一致

 Fragment于 Activity 的关系

下面说用 FragmentPagerAdapter 承载页面的 Fragment 时候对应的生命周期。这里说的情况都是没有设置 setOffscreenPageLimit 属性的时候。这里假设 ViewPager 中有3个 Fragment :OutAFragment ,OutBFragment,OutCFragment 。当首次进入 Activity 时候 ViewPager 会初始化 OutAFragment,并预加载 OutBFragment,生命周期如下所示:

 // 首次进入界面 A 
 E/TAG: OutAFragment  unVisibleToUser
 E/TAG: OutBFragment  unVisibleToUser
 E/TAG: OutAFragment  isVisibleToUser

 E/TAG: OutAFragment  onAttach
 E/TAG: OutAFragment  onCreate

 E/TAG: OutBFragment  onAttach
 E/TAG: OutBFragment  onCreate

 E/TAG: Out
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值