美文网首页
Fragment系列之(2)---FragmentPagerAd

Fragment系列之(2)---FragmentPagerAd

作者: 梦飞成2012 | 来源:发表于2017-07-06 17:45 被阅读52次

在上一篇文章:Fragment系列之(1)---Fragment 和ViewPager的使用简介,我们已经简单的介绍了Fragment配合ViewPager一起使用的步骤。
那么Fragment在切换时候,底层都做了什么操作呢?Fragment在这个过程的生命周期是什么歌样子的呢,我们又有什么需要注意的呢?
下面,我们就从Adapter入手,分析下FragmentPagerAdapter和FragmentStatePagerAdapter对Fragment的生命周期有什么影响?都做了什么操作?

还是上一篇中的例子,我们首先使用的是FragmentPagerAdapter

FragmentPagerAdapter对fragment的影响

第一步

我们直接打开ViewPager所在的页面,在刚打开页面的时候,我们通过log查看其中创建的Fragment的生命周期截图如下:

image.png
分析原因

我们发下首先会创建index为0的fragment,走完从oncreate到onresume的生命周期。同时,会创建index为1的Fragment。这个是ViewPager的特性,提前加载完下一个fragment。

第二步

接着,我们向左滑,index为1的fragment展示出来了,这时候log显示如下截图:

image.png
分析原因

这次我们看到,index为2的Fragment创建了,并走完了从oncreate到onresume的生命周期。同时index为0、1的fragment没有销毁相关的动作。
这也是Fragment的特性,保存当前Fragment左右的两个Fragment的实例,以减少下次切换重新生成Fragment的时间,提升用户体验。

第三步

再次向左滑,展示出index为2的fragment,查看log截图:

image.png

我们发现,ViewPager帮我们创建了index为3的Fragment,这个第二步我们已经知道了。同时,红框框住的我们看到,index为0的fragment调用了onpause到ondestroyview的方法,完成了Fragment的View销毁,但是并没有调用ondestroy和ondetach,说明没有销毁index为0的fragment的示例,说明这个示例还依然在FragmentManager中保留着。

FragmentStatePagerAdapter对fragment的影响

和FragmentPagerAdapter类似的操作,前两步创建操作结果都一样,我们就不赘述了。

第三步

当index为2的fragment显示的时候,log显示如下:

image.png
分析原因

可以看到在使用FragmentStatePageAdapter的时候,当切换页面,除了核心的三个fragment之外的其他fragment会直接被销毁,即调用了从onpause到ondetach的所有生命周期,销毁了不需要存在的fragment。

通过简单的例子,我们大致分析了FragmentPagerAdapter和FragmentStatePagerAdapter两种Adapter的不同,即:

FragmentPagerAdapter:在其包裹的fragment被划过的时候,只会销毁其视图(View),但是Fragment的实例依然保存,依然由FragmentManager对其进行维护管理。
FragmentStatePagerAdapter:在其包裹的fragment被划过的时候,会销毁整个Fragment的实例,等下次需要展示的时候,再重新创建实例(重新创建的时候,会调用onSaveInstance,将最开始创建传入的getArguments恢复,这一块逻辑我们会在下一节中讲解)。

总结说来

  • 如果你的APP页面,主页面只有三四个Fragment要切换,而UV又特别大,可以考虑使用FragmentPagerAdapter来保持Fragment的实例,减少创建的时间,提升用户体验
  • 如果是普通的分类页面,例如许多电商的频道页,UV相对较小,流量较低,包含精选、女装、女鞋等多个频道页,就可以考虑使用FragmentStatePagerAdapter,在用户切换出去之后,销毁Fragment的实例,减少内存的占用
    <br />

下一篇中我们将会讲解Fragment和FragmentTransaction以及FragmentManager的基本关系,看看从oncreate到ondetach都做了哪些操作。

相关文章

网友评论

      本文标题:Fragment系列之(2)---FragmentPagerAd

      本文链接:https://www.haomeiwen.com/subject/klihhxtx.html