2019-10-31:谈一谈Fragment懒加载?
MoJieBlog opened this issue · 14 comments
setmaxlifecycle大概是这个方法吧
重写setUserVisibleHint()
setUserVisibleHint()正解,比onCreate()先一步执行。
建议不使用ViewPage,或者使用ViewPage2取消预加载,就可以避免需要懒加载解决的问题了
需要结合生命周期函数和setUserVisibleHint()函数。
详情请见BaseLazyFragment。
结合ViewPager的示例查看TODO-MVVM
重写setUserVisibleHint方法
重写setUserVisibleHint方法实现Fragment的懒加载
其实懒加载的目的是,得到初始化和掌控,就算没有setUserVisibleHint()可以做到
setUserVisibleHint()正解,比onCreate()先一步执行。
为什么我记得这个方法并不会调用?是需要自己去调用的。
setUserVisibleHint()正解,比onCreate()先一步执行。
为什么我记得这个方法并不会调用?是需要自己去调用的。
setUserVisibleHint是必须在Vp里面 onhiddenchange是show hiden方式的时候调用、
但是以上两种方式实际上都在慢慢被砍掉 特别是前者 在比较新的版本中已经被标记废弃了。
建议使用VP2 (好像Vp1的adapter的第二个Int参数也行)或者单一的show hidden配合setmaxlifecycle,可以控制fragment的生命周期。
建议百度搜索“setmaxlifecycle fragment懒加载”,进行详细了解
本来Fragment的 onResume()表示的是当前Fragment处于可见且可交互状态,但由于ViewPager的缓存机制,它已经失去了意义,也就是说我们只是打开了“福利”这个Fragment,但其实“休息视频”和“拓展资源”这两个Fragment的数据也都已经加载好了。
Fragment里setUserVisibleHint方法
在这里判断 是否可见 是否第一次加载
还有一种方法 在viewpager2 中设置 setMaxLifeCycler(START)
使得预加载后的fragment 最多生命周期走到start
就可以在onresume中去做网络请求
本来Fragment的 onResume()表示的是当前Fragment处于可见且可交互状态,但由于ViewPager的缓存机制,它已经失去了意义,也就是说我们只是打开了“福利”这个Fragment,但其实“休息视频”和“拓展资源”这两个Fragment的数据也都已经加载好了。
Fragment里setUserVisibleHint方法
在这里判断 是否可见 是否第一次加载还有一种方法 在viewpager2 中设置 setMaxLifeCycler(START)
使得预加载后的fragment 最多生命周期走到start
就可以在onresume中去做网络请求
AndroidX下,FragmentPagerAdapter构造函数可传递behavior参数,原理上使用了setMaxLifeCycler,修复了以上onResume回调的问题