前言:最近开始新项目,计划转战到AndroidX。虽然Android Support Library仍然支持,但是Android团队官方的态度也很明确,未来都会为AndroidX为主,Android Support Library已经不再建议使用,并会慢慢停止维护
viewPager为何会出现懒加载
- viewPager配合fragment,默认会加载左右两个fragment,我们称之为viewpager的预加载;有童鞋有话说,不是可以设置setOffscreenPageLimit(0)【手动滑稽】,请看下面代码片段:
public void setOffscreenPageLimit(int limit) {
if (limit < DEFAULT_OFFSCREEN_PAGES) {
// DEFAULT_OFFSCREEN_PAGES = 1,小于1时也等于1,所以setOffscreenPageLimit(0)无济于事
limit = DEFAULT_OFFSCREEN_PAGES;
}
//省略源码
}
- 这种奇葩组合导致fragment的生命周期并非严格意义一样,当预加载的fragment不可见时生命周期已经执行到了onResume();
- 那么这就导致了一个问题,如果用户没有滑到预加载的页面,直接关闭了,那不是白白浪费了用户的流量和咋们服务器的性能开销;因此,懒加载方案应运而生了。
懒加载前世到底何许人也
- fragemnt提供了一个setUserVisibleHint(boolean isVisibleToUser)方法,可以获取是否可见的状态;
- 增加一个是否可见的标志(visibleToUser),我不能让它每次可见都加载数据吧,增加一个标记位首次加载(firstload),为了确保不出问题,增加一个view创建好的标记(viewCreated);
- 下面是具体代码展示:
public abstract class BaseFragment extends Fragment {
/**
* 当前Fragment状态是否可见
*/
private boolean visibleToUser = false;