viewpage中对于fragment的生命周期

来源:互联网 发布:蔬菜报价软件 编辑:程序博客网 时间:2024/06/05 16:48

1.众所周知,fragment的生命周期如下:onattch-oncreat-oncreatview-onactivitycreated-onstart-onresume-onpause-onstop-ondestroyview-ondestroy-ondetach.

2.那么问题来了,在切换过程中fragment的生命周期如何。

例子:三个fragment,默认的缓存方式


首先,先进来吧:

09-08 14:51:57.469 23986-23986/com.yosemite.testframeani E/Fragment1: onAttach09-08 14:51:57.469 23986-23986/com.yosemite.testframeani E/Fragment1: onCreate09-08 14:51:57.470 23986-23986/com.yosemite.testframeani E/Fragment2: onAttach09-08 14:51:57.470 23986-23986/com.yosemite.testframeani E/Fragment2: onCreate09-08 14:51:57.470 23986-23986/com.yosemite.testframeani E/Fragment1: onCreateView09-08 14:51:57.478 23986-23986/com.yosemite.testframeani E/Fragment1: onActivityCreated09-08 14:51:57.478 23986-23986/com.yosemite.testframeani E/Fragment1: onStart09-08 14:51:57.478 23986-23986/com.yosemite.testframeani E/Fragment1: onResume09-08 14:51:57.480 23986-23986/com.yosemite.testframeani E/Fragment2: onActivityCreated09-08 14:51:57.480 23986-23986/com.yosemite.testframeani E/Fragment2: onStart09-08 14:51:57.480 23986-23986/com.yosemite.testframeani E/Fragment2: onResume

可以看到,这是预加载了前两个fragment,第三个没有被加载。


再切换到第二个fragment上看下:

09-08 14:54:16.855 23986-23986/com.yosemite.testframeani E/Fragment3: onAttach09-08 14:54:16.855 23986-23986/com.yosemite.testframeani E/Fragment3: onCreate09-08 14:54:16.855 23986-23986/com.yosemite.testframeani E/Fragment3: onCreateView09-08 14:54:16.859 23986-23986/com.yosemite.testframeani E/Fragment3: onActivityCreated09-08 14:54:16.860 23986-23986/com.yosemite.testframeani E/Fragment3: onStart09-08 14:54:16.860 23986-23986/com.yosemite.testframeani E/Fragment3: onResume

可以看到,第三个fragment开始被加载进来了,虽然第三个页面是不可见的。


再切换到第三个页面吧:

09-08 14:55:15.453 23986-23986/com.yosemite.testframeani E/Fragment1: onPause09-08 14:55:15.453 23986-23986/com.yosemite.testframeani E/Fragment1: onStop09-08 14:55:15.454 23986-23986/com.yosemite.testframeani E/Fragment1: onDestroyView
可以看到,第一个页面消失了,但是并没有和activity取消关联


那再点击到第二个页面吧:

09-08 14:56:29.046 23986-23986/com.yosemite.testframeani E/Fragment1: onActivityCreated09-08 14:56:29.046 23986-23986/com.yosemite.testframeani E/Fragment1: onStart09-08 14:56:29.046 23986-23986/com.yosemite.testframeani E/Fragment1: onResume
可以看到,第一个页面又被展示在前台了。


那就最后再切换到第一个页面吧:

09-08 14:57:52.182 23986-23986/com.yosemite.testframeani E/Fragment3: onPause09-08 14:57:52.182 23986-23986/com.yosemite.testframeani E/Fragment3: onStop09-08 14:57:52.182 23986-23986/com.yosemite.testframeani E/Fragment3: onDestroyView
第三个页面被销毁了


结果大概就是,viewpage在滑动中,只会保留,当前显示的fragment左右两侧的两个fragment,其他的全部被ondestroyview了。










原创粉丝点击