其他分享
首页 > 其他分享> > ViewPager中预加载与懒加载

ViewPager中预加载与懒加载

作者:互联网

ViewPager中预加载与懒加载

预加载

为了让用户在切换过程中不卡顿,安卓官方默认创建当前item时,会创建第二个item,确保用户滑动时第二个item已经被创建,保持viewpager的平滑移动的效果。所以实现了预加载。

懒加载

如果预加载多个页面的时,由于预加载的原因,多个页面同时会对网络进行请求,造成流量浪费,卡顿等问题,懒加载解决的问题就是让页面上一些信息进行延迟加载,不至于同时进行太多并发的请求等

所以引入懒加载概念

Fragment懒加载

Viewpager懒加载

FragmentPagerAdapter与FragmentStatePagerAdapter构造方法增加了一个参数的传递

new ViewPagerAdapter(getSupportFragmentManager(),
                     FragmentPagerAdapter.BEHAVIOR_SET_USER_VISIBLE_HINT);
new ViewPagerAdapter(getSupportFragmentManager(),
                     FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
//根据mBehavior的状态位进行判断
if (mBehavior == BEHAVIOR_SET_USER_VISIBLE_HINT) {
    fragment.setUserVisibleHint(false);
}        
if (mBehavior == BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
    mCurTransaction.setMaxLifecycle(fragment, Lifecycle.State.STARTED);
}

Fragment中setMaxLifecycle使用总结

  1. 当fragment单独使用add时
  2. 使用setMaxLifecycle(Lifecycle.State.CREATED),配合add使用
  3. 使用setMaxLifecycle(Lifecycle.State.STARTED),配合add使用

  4. 使用setMaxLifecycle(Lifecycle.State.RESUMED),配合add使用

  5. 单独使用setMaxLifecycle

    • 对RESUMED状态的Fragment进行操作CREATED操作

    • 对RESUMED状态的Fragment进行操作STARTED操作

    • 对RESUMED状态的Fragment进行CREATED操作,再进行STARTED操作

    setMaxLifecycle这个方法貌似也只在FragmentPagerAdapter和FragmentStatePagerAdapter的构造方法传入的参数有用到,查看其它的文章时好像并没有看到对这个方法的调用,所以关于每个状态的详细使用暂时就不去过多记录了

    总结

    在AndroidX包下使用的懒加载方案通过使用FragmentPagerAdapter与FragmentStatePagerAdapter构造方法的第二个参数控制。

    在调用构造方法时传入下面的参数,在onResume()方法中去执行延迟加载的操作
    FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT

标签:RESUMED,中预,CREATED,fragment,ViewPager,item,状态,加载
来源: https://blog.csdn.net/yxf0448/article/details/110001314