Fragment懒加载
简述
大部分APP框架由一个单例MainActivity和多个Fragment组成;在实际开发中常使用BottomNavigationView+Fragment,而又在Fragment中使用ViewPager+Fragment,多层嵌套Fragment,进入一个界面之后,会牵连多个同级的Fragment同时启动,若都存在网络请求,则负担很大,所有一般当用户滑到某个界面时,此Fragment开始加载数据,其他Fragment则不受印象
LazyFragment
建立一个baseFragment,其他Fragment继承此父类即可,然后实现其InitLazy()方法,并将网络请求,IO处理放置在其中即可实现显示即加载
public abstract class LazyFragment extends Fragment {
/**
* whether execute lazy*/
private boolean isLoaded = false;
/**
* fragment whether looked to user */
private boolean isVisible = false;
private boolean isCallResume = false;
private boolean isCallHint = false;
@Override
public void onResume() {
super.onResume();
isCallResume = true;
if (!isCallHint)isVisible = !isHidden();
IsLazy();
}
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
isVisible = !isHidden();
IsLazy();
}
@Override
public void onDestroyView() {
super.onDestroyView();
isLoaded = false;
isVisible = false;
isCallResume = false;
isCallHint = false;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.isVisible = isVisibleToUser;
isCallHint = true;
IsLazy();
}
private void IsLazy(){
if (!isLoaded && isVisible && isCallResume){
InitLazy();
isLoaded = true;
}
}
public abstract void InitLazy();
}