Skip to content

2019-10-31:谈一谈Fragment懒加载? #178

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
MoJieBlog opened this issue Oct 31, 2019 · 14 comments
Open

2019-10-31:谈一谈Fragment懒加载? #178

MoJieBlog opened this issue Oct 31, 2019 · 14 comments

Comments

@MoJieBlog
Copy link
Collaborator

No description provided.

@DaveBoy
Copy link

DaveBoy commented Oct 31, 2019

setmaxlifecycle大概是这个方法吧

@zhaoerlei1989
Copy link

重写setUserVisibleHint()

@wanghao15536870732
Copy link

setUserVisibleHint()正解,比onCreate()先一步执行。

@LvKang-insist
Copy link

@kwcn
Copy link

kwcn commented Nov 1, 2019

建议不使用ViewPage,或者使用ViewPage2取消预加载,就可以避免需要懒加载解决的问题了

@azhon
Copy link

azhon commented Nov 1, 2019

需要结合生命周期函数和setUserVisibleHint()函数。
详情请见BaseLazyFragment
结合ViewPager的示例查看TODO-MVVM

@chenqi5256969
Copy link

重写setUserVisibleHint方法

@JianhuaWan
Copy link

重写setUserVisibleHint方法实现Fragment的懒加载

@nealkafuly
Copy link

其实懒加载的目的是,得到初始化和掌控,就算没有setUserVisibleHint()可以做到

@yfrflash
Copy link

yfrflash commented Jan 3, 2020

setUserVisibleHint()正解,比onCreate()先一步执行。

为什么我记得这个方法并不会调用?是需要自己去调用的。

@DaveBoy
Copy link

DaveBoy commented Jan 3, 2020

setUserVisibleHint()正解,比onCreate()先一步执行。

为什么我记得这个方法并不会调用?是需要自己去调用的。

setUserVisibleHint是必须在Vp里面 onhiddenchange是show hiden方式的时候调用、

但是以上两种方式实际上都在慢慢被砍掉 特别是前者 在比较新的版本中已经被标记废弃了。

建议使用VP2 (好像Vp1的adapter的第二个Int参数也行)或者单一的show hidden配合setmaxlifecycle,可以控制fragment的生命周期。

建议百度搜索“setmaxlifecycle fragment懒加载”,进行详细了解

@manondidi
Copy link

本来Fragment的 onResume()表示的是当前Fragment处于可见且可交互状态,但由于ViewPager的缓存机制,它已经失去了意义,也就是说我们只是打开了“福利”这个Fragment,但其实“休息视频”和“拓展资源”这两个Fragment的数据也都已经加载好了。

Fragment里setUserVisibleHint方法
在这里判断 是否可见 是否第一次加载

还有一种方法 在viewpager2 中设置 setMaxLifeCycler(START)
使得预加载后的fragment 最多生命周期走到start
就可以在onresume中去做网络请求

@xandone
Copy link

xandone commented Oct 20, 2020

本来Fragment的 onResume()表示的是当前Fragment处于可见且可交互状态,但由于ViewPager的缓存机制,它已经失去了意义,也就是说我们只是打开了“福利”这个Fragment,但其实“休息视频”和“拓展资源”这两个Fragment的数据也都已经加载好了。

Fragment里setUserVisibleHint方法
在这里判断 是否可见 是否第一次加载

还有一种方法 在viewpager2 中设置 setMaxLifeCycler(START)
使得预加载后的fragment 最多生命周期走到start
就可以在onresume中去做网络请求

AndroidX下,FragmentPagerAdapter构造函数可传递behavior参数,原理上使用了setMaxLifeCycler,修复了以上onResume回调的问题

@liyanfei250
Copy link

liyanfei250 commented Dec 24, 2020

https://www.jianshu.com/p/2201a107d5b5?utm_campaign=hugo
这才是经典讲解

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests