ViewPager+Fragment(懒加载)

viewpage+fragment 比如下面有navitation 的menu有五个itme  T1 T2 T3 T4 T5 

什么是缓存页面?什么是预加载?

缓存是开辟一个空间预加载是向空间存放东西,如果设置为setOffscreenPageList(1),从T1 到    T3 会缓存T2和T4,回预加载T4,

setOffscreenPageList(2) 左右各缓存2个 加上当前 缓存了5个,设置0无效还是缓存左右各1个。如果左边或者右边没有页面则不缓存。

setOffscreenPageList(1)预加载 t1到T3 会预加载T4   从T3到       t2会预加载

预加载越多就会越卡顿累计到后面就会OOM,懒加载实现就很必要(微信,头条..都是运用的懒加载)。

懒加载

从T1 到T3  setUserVisibleHint(boolean isvisible)次函数为非生命周期函数先执行

T3 FALSE   T1 FALSE  T2 TRUE

执行3的生命周期函数

1.setUserVisibleHint(boolean isvisible)//判断Fragment是否可见(如果可见加载,不可见停止)

上面的方法预加载的T3是false 加载控件需要确定ui初始化 ,所以需要设置tag  isViewCreated()判断Fragment走OnCreatView方法

2.我们手动设置的isViewCreated()方法在OnCreatView设置成true 默认是false.由于非生命周期先执行所以 一直是fase不能显示页面。一直显示加载。所以显示和终止的方法写在setUserVieibleHint()是不安全的  放在onCreatView()里面直接写

3从不可见到可见才算可见   从可见到不可见才算不可见 记录上一次是什么状态,上一次 是false这一次是ture才可见

4Fragment 跳转到activity的时候 当前Fragment 停下。分别执行fragment的onPause() 和onResume()中增加分发

5Fragment里面嵌套Fragment

比如T1一个Frgment T2 Fragment里面有子Fragment 加载T1的时候会加载T2l里面的子fragment预加载了

需要判断Fragmetn是否真的可见,运行到有子fragment的父fragment 里面不加载问题需要手动分发

ViewPager2

setUserVisibleHint(boolean isvisible) 这个方法过时,用setMaxLifeCircle()代替处理差不多方式不一样。缓存方面第一代用的poplate 加适配器  第二代用的是recycleview的缓存机制

你可能感兴趣的:(ViewPager+Fragment(懒加载))