最近做性能优化时 ,最先想到的就是通过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的,这一点没什么区别)
网友评论