ViewPager预加载机制

ViewPager加载图片控件:

ViewPager会默认加载当前页和当前页的左右两页。

一开始当前页是下标0,所以一开始默认加载第0页(指下标,下同)和第1页。

当你向右滑动,当前页为第1页时,ViewPager会加载第2页,这时一共有3页存在(第0,1,2页)。

再向右滑动,当前页为第2页时,会移除第0页,加载第3页,同理向左滑动当前页为第1页时,会移除第3页。

所以我们可以通过这个原理使ViewPager始终只加载3页的图片。

如何实现呢?

只需在在PagerAdapter中的instantiateItem(...)与destroyItem(...)   方法中添加加载与移除图片的实现


instantiateItem(...)


 加载图片


destroyItem(...)   


  移除回收图片

ViewPager+Fragment

我们不希望加载预加载下一页,只需加载用户关注的当前页。因为预加载的话,消耗资源,甚至肯能导致一些异常。这是我们所讨厌的。

简单的实现

自己定义个类,将ViewPager的源代码copy到其中,修改DEFAULT_OFFSCREEN_PAGES = 0。

通过setOffscreenPageLimit(0)来设置不提前预加载,但这样的设置没有效果。

通过研究ViewPager的 源码可以设置该类默认的DEFAULT_OFFSCREEN_PAGES = 0,来预防预加载

ViewPager加载图片控件:

ViewPager会默认加载当前页和当前页的左右两页。

一开始当前页是下标0,所以一开始默认加载第0页(指下标,下同)和第1页。

当你向右滑动,当前页为第1页时,ViewPager会加载第2页,这时一共有3页存在(第0,1,2页)。

再向右滑动,当前页为第2页时,会移除第0页,加载第3页,同理向左滑动当前页为第1页时,会移除第3页。

所以我们可以通过这个原理使ViewPager始终只加载3页的图片。

如何实现呢?

只需在在PagerAdapter中的instantiateItem(...)与destroyItem(...)   方法中添加加载与移除图片的实现


instantiateItem(...)


 加载图片


destroyItem(...)   


  移除回收图片

ViewPager+Fragment

我们不希望加载预加载下一页,只需加载用户关注的当前页。因为预加载的话,消耗资源,甚至肯能导致一些异常。这是我们所讨厌的。

简单的实现

自己定义个类,将ViewPager的源代码copy到其中,修改DEFAULT_OFFSCREEN_PAGES = 0。

通过setOffscreenPageLimit(0)来设置不提前预加载,但这样的设置没有效果。

通过研究ViewPager的 源码可以设置该类默认的DEFAULT_OFFSCREEN_PAGES = 0,来预防预加载

时间: 2024-10-06 00:23:16

ViewPager预加载机制的相关文章

ViewPager和Fragment的综合使用的预加载机制

混合使用的适配器: FragmentPagerAdapter   FragmentStatePagerAdapter(Fragment数据动态性较大.占用内存较多的时候) ViewPager的预加载:ViewPager 会默认预先初始化当前页面的左右相邻页面,它的预先加载页面数量默认是 1 , 并且是private的不可以修改,这样做的好处是左右滑动会比较流畅. 懒加载:即让ViewPager预加载初始化UI,而具体一些数据,网络访问请求等延迟加载.这是靠Fragment里有一个 setUser

关于禁止ViewPager预加载问题【转】

转自:http://blog.csdn.net/qq_21898059/article/details/51453938#comments 我最近上班又遇到一个小难题了,就是如题所述:ViewPager预加载的问题.相信用过ViewPager的人大抵都有遇到过这种情况,网上的解决办法也就那么几个,终于在我自己不断试验之下,完美解决了(禁止了)ViewPager的预加载. 好了,首先来说明一下,什么是ViewPager的预加载:ViewPager有一个 "预加载"的机制,默认会把View

android 禁止viewpager预加载

ViewPager这个控件相信每一个做android的都用过,而且一定用过,viewpager是可以前后滑动的,这在很多app中引导页中用过,大家也知道它是带缓存的,现在新建一个项目 viewpagertest, package com.example.viewpagertest; import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import android.os.IBinder

图片无限轮播由于ViewPager的预加载机制所导致的问题

分类和回归是分析预测中最古老的话题.支持向量机.逻辑回归.朴素贝叶斯算法.神经网络和深度学习都属于分类和回归技术. 本章将重点关注决策树算法和它的扩展随机决策森林算法,这两个算法灵活且应用广泛,即可用于分类问题,也可用于回归问题.更令人兴奋的是,它们可以帮助我们预测未来,至少是预测我们尚不肯定的事情.比如,根据线上行为来预测购买汽车的概率,根据用词预测邮件是否是垃圾邮件,根据地理位置和土壤的化学成分预测哪块耕地的产量可能更高. 总体实现无限轮播的思想,其实和网上大部分的思路都是相同的,设置一个I

硅谷新闻2--禁止viewpager预加载

ContentFragment.java class MyOnPageChangeListener implements ViewPager.OnPageChangeListener { ..... /** * 当某个页面被选中的时候回调这个方法 * @param position 被选中页面的位置 */ @Override public void onPageSelected(int position) { // BasePager basePager = basePagers.get(pos

viewpager处理(三):让viewpager不预加载下一页

有时候viewpager加载页面的时候,我们发现页面的数据量很大,预加载的话会消耗性能,为了节省用户流量和手机性能,所以我们想让viewpager不自动预加载下一页,怎么实现呢? viewpager预加载是这样产生的:在PagerAdapter里的instantiateItem方法中,如果有加载数据的逻辑,则viewpager就会预加载.所以加载数据的逻辑不能放在PagerAdapter里的instantiateItem方法中.我们可以将加载数据逻辑放到页面切换监听中. 1.加载数据不放在Pag

ViewPager的刷新、限制预加载、缓存所有

[框架]: 公共部分:左侧菜单.TitleBar.RadioGroup(3个RadioButton:X.Y.Z) 选择X页面:指示器+ViewPager [要达成的效果]: (1)左侧选择A,进入X页面,X1联网刷新页面,此时禁止X2预加载—>滑动到X2页面,X2才联网刷新—>X3—>X4: (2)从X4再滑到X3.X2.X1时,X1.X2.X3不需要再次刷新,假设停留在X2页面: (3)左侧再点选择B,或者先点Y再点选择B再点X,这时候X2联网刷新: (4)X2页面滑到X1.X3.X4

预加载与智能预加载(iOS)

来源:Draveness(@Draveness) 链接:http://www.jianshu.com/p/1519a5302141 前两次的分享分别介绍了 ASDK 对于渲染的优化以及 ASDK 中使用的另一种布局模型:这两个新机制的引入分别解决了 iOS 在主线程渲染视图以及 Auto Layout 的性能问题,而这一次讨论的主要内容是 ASDK 如何预先请求服务器数据,达到看似无限滚动列表的效果的. 这篇文章是 ASDK 系列中的最后一篇,文章会介绍 iOS 中几种预加载的方案,以及 ASD

如何通过预加载器提升网页加载速度

预加载器(Pre-loader)可以说是提高浏览器性能最重要的举措.Mozilla 官方发布数据,通过预加载器技术网页的加载性能提升了19%,Chrome测试了 Alexa 排名前2000名网站,性能有20%的提升. 它并不是一门新技术,有人认为只有 Chrome 才具备这个功能.也有人认为它是有史以来提升浏览器性能最有效的方法.如果你第一次接触预加载器,也许心中已经有了无数个问号.什么是预加载器?它是如何提升浏览器性能的? 首先需要了解浏览器是如何加载网页的 一个网页的加载依赖于脚本文件.CS