android fragment跳转卡顿,解决ViewPager+Fragment切换页面卡顿
思路:滑动卡顿主要的原因是因为每次切换viewpager的时候会去缓存设定的页面个数,导致每次都会有fragment里的生命周期被重新调用,一些初始化内容,网络请求等被无限调用。解决步骤分为两步:1、首先将viewpager的缓存个数设置为fragment的个数,也就是页面的个数。例如:viewPager.setOffscreenPageLimit(7);这样可以在第一次创建viewpager和f
思路:
滑动卡顿主要的原因是因为每次切换viewpager的时候会去缓存设定的页面个数,导致每次都会有fragment里的生命周期被重新调用,一些初始化内容,网络请求等被无限调用。
解决步骤分为两步:1、首先将viewpager的缓存个数设置为fragment的个数,也就是页面的个数。例如:viewPager.setOffscreenPageLimit(7);
这样可以在第一次创建viewpager和fragment的时候就将所有的页面都缓存,再次切换页面的时候就不会在去缓存已经被缓存的fragment页面。2、给Fragment写懒加载,只有当前Fragment处于可视窗口的时候会被调用。
重写Fragment的setUserVisibleHint方法,adapter中的每个fragment切换的时候都会被调用,如果是切换到当前页,那么isVisibleToUser==true,否则为false。示例代码如下(在Fragment封装的基类BaseFragment中,用来被其它自定义Fragment继承,重写lazyLoad方法就可以使用):
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
isVisible =true;
lazyLoad();
}else {
isVisible =false;
onInvisible();
}
}
复制代码
/**
* 不可见
*/
protected void onInvisible() {
}
复制代码
/**
* 延迟加载
*/
public void lazyLoad() {
}
复制代码
适当的加一些标志位,用来判断是否第一次加载,是否需要刷新页面等等,就可以解决页面卡顿的问题,只有在需要刷新的时候才去做一些耗时耗资源的操作。
更多推荐
所有评论(0)