面试:Fragment懒加载
admin
2024-02-06 10:53:27

AndroidX的Fragment懒加载 - 简书

fragment懒加载的前世与今生_mashanshui的博客-CSDN博客

以前处理 Fragment 的懒加载,我们通常会在 Fragment 中处理 setUserVisibleHint (ViewPager)+ onHiddenChanged(FragmentTransaction) 这两个函数,而在 Androidx 模式下,我们可以使用 FragmentTransaction.setMaxLifecycle() 的方式来处理 Fragment 的懒加载。

AndroidX之前的Fragment懒加载

在AndroidX之前,Fragment的使用有两种方式:

  • 使用ViewPager+Fragment模式
  • 通过FragmentTransaction控制Fragment的使用

1.AndroidX之前ViewPager模式的懒加载

分析:
由于ViewPager的缓存机制offscreenPageLimit始终>=1,所以ViewPager会缓存布局屏幕外的Fragment>=1个,被缓存的屏幕外的Fragment也会像屏幕可见的Fragment一样执行生命周期到onResume,并且在用户滑动后缓存的Fragment由不可见到可见时并不会调用onResume。根据ViewPager调用Fragment的方法顺序:

setUserVisibleHint->onAttach->onCreate->onCreateView->onViewCreated->onActivityCreated->onStart->onResume

所以,在androidX之前,ViewPager模式的懒加载方式是:

  • 对于第一个可见的Fragment,在onResume方法中执行懒加载请求数据
  • 对于缓存的Fragment由不可见到可见时,通过setUserVisibleHint方法中执行懒加载请求数据

2.AndroidX之前FragmentTransaction控制模式的懒加载

对于一个FrameLayout绑定多个Fragment,并每次只显示一个,我们可以这样通过FragmentTransaction控制Fragment的行为

FragmentTransaction模式下Fragment会全部执行生命周期至onResume,并且会调用onHiddenChanged表示Fragment隐藏是否发生改变,但是第一个可见的Fragment因为是可见的,所以并不会调用onHiddenChanged

所以,anroidX之前FragmentTransaction模式下的懒加载:

  • 第一个可见Fragment通过onResume方法和isHidden变量进行判断进行懒加载。
  • 其它由不可见到可见的Fragment,因为已经执行了onResume方法,所以通过onHiddenChanged方法进行懒加载:

3.AndroidX的Fragment懒加载

通过上面的分析我们知道在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 懒加载的新实现 - 掘金

相关内容

热门资讯

开勒股份(301070.SZ)... 格隆汇12月26日丨开勒股份(301070.SZ)公布,公司拟以自有资金人民币4,000万元认缴杭州...
江西餐饮从业者话赣菜发展:融入... 中新网南昌12月26日电 (吴鹏泉 王中庆)隆冬时节,从街边小馆到特色餐厅,一道道冒着“锅气”的赣菜...
邮储银行:执行董事及行长刘建军...   12月26日金融一线消息,邮储银行公告称,公司董事会收到刘建军先生的辞职报告。刘建军先生因达到法...
最新或2023(历届)微淘运营... 4.2.2丶文章发出之后的数据: (补充一句:数据不是非常准确,因为微信也有群发信息的) 上图可...
最新或2023(历届)微淘运营... 标题丶图片丶内容都要把好观的同时,认真创造沟通性话题以进行一对一问答,把精力投入到用户研究丶需求把握...