Android ViewPager+Fragment 懒加载处理

效果.gif

日常项目中无可或缺的会用到ViewPager嵌套Fragment的操作,以及Fragment中再嵌套Fragment的这种复杂嵌套的操作.由于ViewPager的缓存机制就会加载多个Fragmen页面导致加载速度变慢,这个时候我们就用到了Fragment 懒加载操作了

懒加载: 就是懒驴拉磨 打一鞭走一步即,触发执行 不触发不执行

示例.png

示例效果实现是基于 ViewPager+FragmentStatePagerAdapter+Fragment

上述效果要实现懒加载需要首先学习Fragment在ViewPager中的生命周期执行

Fragment的创建以及离开和回到页面的生命周期

 Fragment 创建生命周期:
  setUserVisibleHint() ->onAttach -> onCreate -> onCreatedView -> onActivityCreated -> onStart -> onResume ->onPause ->
  onStop ->   onDestroyView -> onDestroy -> onDetach

  
 Fragment 离开流程():
  默认缓存数左右一个
  缓存数内执行: ->setUserVisibleHint(false)  不执行onPause的操作
  缓存数外执行: ->setUserVisibleHint(false) ->onPause() ->onStop() ->   onDestroyView() -> onDestroy() -> onDetach()(执行销毁操作)


 Fragment 重新展示:
 缓存数内执行: setUserVisibleHint(true) 不执行onResume()的操作
 缓存数内执行: setUserVisibleHint(true) ->onAttach() ->oncreate() ->onCreatedView() -> onViewCreated() ->onStart ()-> onResume()(执行创建操作)

创建.png
离开重新展示的生命周期.png

*由上边的生命周期数据可以得出ViewPager+Fragment,切换Fragment的时氛围两种情况

  • 当位置切换的位超出ViewPager设置的初始化中配置setOffscreenPageLimit()的个数时,离开页面的Fragment会执行销毁动作重新进入页面执行创建操作
  • 切换的位置未超出setOffscreenPageLimit() 个数 执行的是setUserVisibleHint() 进入是true 退出是false

由上边的生命周期可以看出要实现懒加载主要用到的方式是setUserVisibleHint()此方法在页面要是展示在前台的和处于后太的时候被调用

image.png

实现方式

  • setUserVisibleHint()+onResume()+onPause()
  • Androidx 包下 FragmentTransaction.setMaxLifecycle() 用于替代setUserVisibleHint(),在 FragmentStatePagerAdapter ,FragmentPagerAdapter等Adapter

总结

Fragmen 懒加载分为好多种情况 所以要做到具体问题具体分析,这里只处理ViewPager+Fragment的这种方案 不处理单独添加Fragment的懒加载方案.以后将基于上边的两种实现方式处理Fragment的懒加载

写作不易,欢迎点赞

你可能感兴趣的:(Android ViewPager+Fragment 懒加载处理)