Fragment 懒加载 最简实现

最近做性能优化时 ,最先想到的就是通过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 懒加载 最简实现)