Android Fragment生命周期
2017-09-06 本文已影响20人
风吹白云飘
一直以来使用ViewPager时都感觉生命周期紊乱,今天闲下来,搞清楚到底咋回事
1、Fragment搭配ViewPager
这个是当前使用频率最高的组合。以下均使用ViewPager默认缓存页数1页。
搭配一:FragmentPagerAdapter
每一个创建的Fragment会缓存在内存中, 常用于引导页,tab页等固定页面数量较少的
![](https://img.haomeiwen.com/i1813324/4064ce9a1fc29df2.png)
![](https://img.haomeiwen.com/i1813324/42b36968f2a18318.png)
![](https://img.haomeiwen.com/i1813324/7f798d02da99340c.png)
搭配二:FragmentStatePagerAdapter使用。
缓存外的页面会被销毁,常用于动态添加页面,页面数量较多的
![](https://img.haomeiwen.com/i1813324/3f4fcf43d3b6e85f.png)
此种情况,不缓存的直接销毁,需要恢复的重新创建。
总结:
1、需要特别注意的是:第0页初次创建,是先调用setUserVisibleHint方法,后调用onCreateView,但是此页在onCreateView里getUserVisibleHint()为true;后续页面正常,先调用onCreateView,后调用setUserVisibleHint。此处不清楚,fragment懒加载时很容易出错。
2、在两头(第0页和最后一页),当前有效页数都是两个,中间的有效页数为3个,左右各一个。
3、使用FragmentPagerAdapter,应该用变量存下View,恢复时候可以判断非空就复用,避免重复inflate或者创建造成资源浪费。
2、Fragment独立使用
此时生命周期跟Activity一样,没什么特别的,很单纯的正常创建。值得一提的是这种情况下setUserVisibleHint方法是不会被调用的,此方法只有在PagerAdapter这样一组Fragment中才会被调用。