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的缓存机制
网友评论