当前位置: 移动技术网 > IT编程>移动开发>Android > Android使用ViewPager快速切换Fragment时卡顿的优化方案

Android使用ViewPager快速切换Fragment时卡顿的优化方案

2019年07月31日  | 移动技术网IT编程  | 我要评论

碾米机械,cz3192航班,御龙在天感恩大礼包

当viewpager切换到当前的fragment时,fragment会加载布局并显示内容,如果用户这时快速切换viewpager,即fragment需要加载ui内容,而又频繁地切换fragment,就容易产生卡顿现象(类似在listview快速滑动的同时加载图片容易卡顿)。

优化方案:

1.fragment轻量化

如果viewpager加载的fragment都比较轻量,适当精简fragment的布局,可提高fragment加载的速度,从而减缓卡顿现象。

2.防止fragment被销毁

viewpager在切换的时候,如果频繁销毁和加载fragment,就容易产生卡顿现象,阻止fragment的销毁可有效减缓卡顿现象。

(1)在pageradapter里覆盖destroyitem方法可阻止销毁fragment

@override    
public void destroyitem(viewgroup container, int position, object object) {      
    //super.destroyitem(container, position, object);    
}

(2)通过pageradapter的setoffscreenpagelimit()方法可以设置保留几个fragment,适当增大参数可防止fragment频繁地被销毁和创建。

风险:在fragment比较多的情况下,部分低端机型容易产生oom问题。

3.fragment内容延迟加载

(1) 描述

在切换到当前fragment的时候,并不立刻去加载fragment的内容,而是先加载一个简单的空布局,然后启动一个延时任务,延时时长为t,当用户在该fragment停留时间超过t时,继续执行加载任务;而当用户切换到其他fragment,停留时间低于t,则取消该延时任务。

(2) 具体操作

首先,设置延迟任务

private runnable load_data = new runnable() {    
    @override    
    public void run() {      
     //在这里数据内容加载到fragment上    
    }  
};

启动任务

@override 
public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { 
  //初始化视图,这里最好先设置一个进度对话框,提示用户正在加载数据
  initview();
  //启动任务,这里设置500毫秒后开始加载数据  handler.postdelayed(load_data,500)
  return view;
}

若用户切换到其他fragment则取消任务

//判断fragment是否可视的重载方法
@override  
public void setuservisiblehint(boolean isvisibletouser) {    
  super.setuservisiblehint(isvisibletouser);    
    if(!isvisibletouser)        
      mhandler.removecallbacks(load_data);
}

(3) 注意

使用setuservisiblehint判断用户是否切换到其他fragment,这样的做法有个缺陷,因为会在viewpager开始滑动的时候取消延时任务,而在滑动偏移量不足的情况下,viewpager会继续回滚到当前fragment,导致当前fragment的加载任务被取消而又不会重新启动加载任务。

这里我使用的做法是,给viewpager增加一个onpagechangelistener,,该监听器的onpageselected(position)能监听viewpager当前切换到哪个fragment,在这里将其他fragment的延迟加载任务取消掉。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对移动技术网的支持。如果你想了解更多相关内容请查看下面相关链接

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网