AndroidX的Fragment懒加载 - 简书
fragment懒加载的前世与今生_mashanshui的博客-CSDN博客
以前处理 Fragment 的懒加载,我们通常会在 Fragment 中处理 setUserVisibleHint (ViewPager)+ onHiddenChanged(FragmentTransaction) 这两个函数,而在 Androidx 模式下,我们可以使用 FragmentTransaction.setMaxLifecycle() 的方式来处理 Fragment 的懒加载。
在AndroidX之前,Fragment的使用有两种方式:
分析:
由于ViewPager的缓存机制offscreenPageLimit始终>=1,所以ViewPager会缓存布局屏幕外的Fragment>=1个,被缓存的屏幕外的Fragment也会像屏幕可见的Fragment一样执行生命周期到onResume,并且在用户滑动后缓存的Fragment由不可见到可见时并不会调用onResume。根据ViewPager调用Fragment的方法顺序:
setUserVisibleHint->onAttach->onCreate->onCreateView->onViewCreated->onActivityCreated->onStart->onResume
所以,在androidX之前,ViewPager模式的懒加载方式是:
onResume方法中执行懒加载请求数据setUserVisibleHint方法中执行懒加载请求数据对于一个FrameLayout绑定多个Fragment,并每次只显示一个,我们可以这样通过FragmentTransaction控制Fragment的行为
FragmentTransaction模式下的Fragment会全部执行生命周期至onResume,并且会调用onHiddenChanged表示Fragment隐藏是否发生改变,但是第一个可见的Fragment因为是可见的,所以并不会调用onHiddenChanged。
所以,anroidX之前FragmentTransaction模式下的懒加载:
onResume方法和isHidden变量进行判断进行懒加载。onHiddenChanged方法进行懒加载:通过上面的分析我们知道在AndroidX之前,不管Fragment是否可见,都执行了onResume方法,这就违背了生命周期中onResume的设计本意了。所以在安卓X中,在FragmentTransaction类中增加了一个方法setMaxLifecycle(@NonNull Fragment fragment,@NonNull Lifecycle.State state),我们可以通过这个方法的第二个参数设置Fragment最大能执行到哪个生命周期方法。
对于不可见的Fragment,我们可以通过FragmentTransaction. setMaxLifecycle(fragment, Lifecycle.State.STARTED)设置Fragment最大执行到onStart()方法。
对于可见的Fragment,通过FragmentTransaction. setMaxLifecycle(fragment, Lifecycle.State.RESUMED)设置Fragment最大执行到onResume()方法。
Androidx 下 Fragment 懒加载的新实现 - 掘金
上一篇:描写维多利亚港夜晚的句子
下一篇:“任”字开头的成语有哪些