Android使用:viewpage快速切换片段时卡顿的优化方案

  

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

  

<>强优化方案:

  

<强> 1.片段轻量化

  

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

  

<强> 2。防止片段被销毁

  

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

  

<强>(1)在PagerAdapter里覆盖destroyItem方法可阻止销毁片段

        @Override   公共空间destroyItem (ViewGroup容器,int位置、对象对象){//super.destroyItem(集装箱、位置、对象);   }      

<强>(2)通过PagerAdapter的setOffscreenPageLimit()方法可以设置保留几个片段,适当增大参数可防止片段频繁地被销毁和创建。

  

<强>风险:在片段比较多的情况下,部分低端机型容易产生伯父问题。

  

<强> 3.片段内容延迟加载

  

(1)描述

  

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

  

(2)具体操作

  

<强>首先,设置延迟任务

        私人Runnable LOAD_DATA=https://www.yisu.com/zixun/new Runnable () {   @Override   公共空间run () {//在这里数据内容加载到片段上   }   };      

<>强启动任务

        @Override   公众视野>//判断片段是否可视的重载方法   @Override   公共空间setUserVisibleHint(布尔isVisibleToUser) {   super.setUserVisibleHint (isVisibleToUser);   如果(! isVisibleToUser)   mHandler.removeCallbacks (LOAD_DATA);   }      

(3)注意

  

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

  

这里我使用的做法是,给:viewpage增加一个OnPageChangeListener,,该监听器的onPageSelected(位置)能监听:viewpage当前切换到哪个片段,在这里将其他片段的延迟加载任务取消掉。

  

<强>总结

  

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

Android使用:viewpage快速切换片段时卡顿的优化方案