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

发布时间:2019-08-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android使用ViewPager快速切换Fragment时卡顿的优化方案脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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

总结

android教程
脚本网站
android studio

脚本宝典总结

以上是脚本宝典为你收集整理的Android使用ViewPager快速切换Fragment时卡顿的优化方案全部内容,希望文章能够帮你解决Android使用ViewPager快速切换Fragment时卡顿的优化方案所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:divletState