美文网首页四大组件
Fragment 懒加载 最简实现

Fragment 懒加载 最简实现

作者: halo_0b54 | 来源:发表于2019-10-10 23:17 被阅读0次
    最近做性能优化时 ,最先想到的就是通过Fragment懒加载延迟加载,网上有很多做法,下面我贴上我的实现方案(已经反复验证过).
    我已经抽取成模板了,继承实现方法即可
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.view.View;
    
    
    
    public abstract class LazyLoadFragment extends Fragment {
    
      private boolean mFistVisible = true;
      public static final String TAG_SYSTEM = "LazyLoadFragment";
      private boolean mUserHintCalled;
      private boolean mViewCreated;
    
      @Override
      public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mViewCreated = true;
        if (mFistVisible && mUserHintCalled) {
          lazyLoad();
        }
      }
    
      @Override
      public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (mFistVisible && isVisibleToUser && mViewCreated) {
          lazyLoad();
        }
        if (isVisibleToUser) {
          mUserHintCalled = true;
        }
     
      }
    
      private void lazyLoad() {
        lazyLoadTodo();
        mFistVisible = false;
      }
    
      /**
       * 加载子页面 以及初始化变量 耗时操作等
       */
      public abstract void lazyLoadTodo() ;
    
    }
    

    重点就是继承LazyLoadFragment 实现lazyLoadTodo()方法了,或者改造一下你的基类也行,在lazyLoadTodo()中再做一些耗时任务(初始化或者网络请求等) ,就可以避免Fragment加载卡顿慢的问题了。

    1.为什么加这一堆判断条件?这是因为 setUserVisibleHint()与onViewCreated()调用顺序不确定导致的(亲测)
    2.不要忘记常规操作了(onCreateView()还是要复写返回view的,这一点没什么区别)

    相关文章

      网友评论

        本文标题:Fragment 懒加载 最简实现

        本文链接:https://www.haomeiwen.com/subject/qhvcpctx.html