欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-11-08 14:39:16
当viewpager切换到当前的fragment时,fragment会加载布局并显示内容,如果用户这时快速切换viewpager,即fragment需要加载ui内容,而又频...

当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的延迟加载任务取消掉。

总结

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