当: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当前切换到哪个片段,在这里将其他片段的延迟加载任务取消掉。
<强>总结强>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接