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

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

Activity中的Fragment的生命周期

ViewPager中Frament的生命周期

Fragment中Fragment的生命周期

Activity中Fragment的生命周期

在Activity中创建一个FrameLayout,一个Button用于切换FrameLayout中的Fragment:

515825bc58fa

lifecircle_lxacoder.png

程序运行时打印的log:

515825bc58fa

lifecircle_lxacoder.png

这里注意到当Activity中Start(由不见变为可见)调用后,Fragment的onActivityCreated才会被调用。

当点击Button时的log:

515825bc58fa

lifecircle_lxacoder.png

可以看出,第二个Fragment先和Activity建立关联,并且Create,等到第一个Fragment消失时,第二个Fragment才createView,也就是加载Fragment的布局,然后调用onActivityCreated,在这里第二个Fragment关联的Activity已经创建好了的,但是系统还是会调用这个方法一次,确保与Fragment关联的Activity是创建好了的。,

点击back按钮时的log:

515825bc58fa

lifecircle_lxacoder.png

可以看出Activity先于Fragment销毁。

ViewPager中Fragment的生命周期

这次直接在根布局中放了一个ViewPager,adapter继承的FragmentPagerAdapter:

515825bc58fa

lifecircle_lxacoder.png

程序启动时的Log:

515825bc58fa

lifecircle_lxacoder.png

可以看到,MainAcitivity按照常规顺序调用后,FirstFragment和SecondFragment先后调用了onAttach和onCreate实例化了Fragment,并且在FirstFragment调用onResume之后,SecondFragment也调用了onResume,也就是是说SecondFragment已经加载好了,随时准备变为可见,接下来滑动到SecondFragment,可以看到:

515825bc58fa

lifecircle_lxacoder.png

没错,和我心里想的一样,加载的是第三个Fragment,嗯,心里应该明白FragmentPagerAdapter这样做的目的,然后再滑到第三个Fragment,可以看到:

515825bc58fa

lifecircle_lxacoder.png

第一个Fragment已经DestroyView了,FragmentPagerAdapter默认的是会加载前后两个pager,这次在程序启动时调用pager的setCurrentItem(1)方法,嗯,心里面已经知道会输出什么了,来验证一下,:

515825bc58fa

Paste_Image.png

输出了这么多,和心里想的一样,第一个pager里的Fragment和第二个pager里的Fragment都已经加载了。

我在这里的理解是onResume()调用后,不一样像网上讲得那样,一定会从不可见变得可见,有可能是把自己加载到了内存,随时准备着和用户交互。

Fragment中Fragment的生命周期

应该说成Fragment中的Viewpager中的Fragment的生命周期,这次将Viewpager放到一个FirstFragment中,Viewpager包含secondfragment和ThirdFragment,看看会有什么输出:

515825bc58fa

Paste_Image.png

没有什么意外的,和想的一样,相当于前面两个主题内容的结合。

如果有什么说的不对的,希望大家指出来,谢谢.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值