Monday, July 20, 2015
Android ViewPager 预加载的研究
这两天写个日历,我也是操了。Viewpager 的预加载是很方便的,但是,如何处理好预加载的问题的确是很头疼的问题。因为,有的时候你需要去刷新当前的界面的时候,你获取不到,当前显示的Fragment or View. So 你就没有办法操作了。日历就是这么要求的!
简单介绍几个方法:
1 cardPagerViewFragment.getUserVisibleHint()
源码介绍说显示当前的可见的View or fragment.
我们都知道ViewPager 预加载的生命周期,不知道的话一会介绍!卧槽,直接返回的是下一个fragment的 VisibleHint()
如图: you can see this case: i only scroll a viewpager.
when iscroll to page=1 the 1page return false; 2 page return ture; because the ViewPager preLoad the next page!
2 简单的介绍一下Viewpager 加载Fragment 的生命周期,我用的是V4的FragmentActivty FrgamenStatePagerAdapter.
2.1一开始初始化的时候:预加载第一和第二个Frgament
开始的时候加载了两个Fragment.这就是预加载的问题。
2.2当你从第0页滑到第1页的时候:
这个时候我们看到了 2 已经加载。我们在所有的语言中,index 都是从0开始计算的。所以,这里其实加载的是第三页的内容。所以,这个时候你去调用Adapter,getCurrentItem()
返回的Fragment 和View 的对象,都是第三页的对象实体。所以,一切方法获取到的都是不对的对象(都是下一页的对象实体)。
2.3从第1页滑到第2页。
首先,释放了Page0的资源。 然后创建 Page3 的页面的内容。
2.4 从第2页滑动到第1页
首先释放了Pager 3 也面的内容。然后去加载 Page1 的内容。
2.5 从0 ---> 1页面 的时候
这个时候,内存释放了Page 2 的内容。
2.6 0 退出的时候。
先释放 1 的资源。
再释放 0 的资源。
到这里我们已经很了解 ViewPager 的预加载;
3 the source sayL the method can limit the prepage of Viewapger.然而并没有什么卵用。
mViewapger.setOffscreenPageLimit(0);
/**
* Set the number of pages that should be retained to either side of the
* current page in the view hierarchy in an idle state. Pages beyond this
* limit will be recreated from the adapter when needed.
*
* <p>This is offered as an optimization. If you know in advance the number
* of pages you will need to support or have lazy-loading mechanisms in place
* on your pages, tweaking this setting can have benefits in perceived smoothness
* of paging animations and interaction. If you have a small number of pages (3-4)
* that you can keep active all at once, less time will be spent in layout for
* newly created view subtrees as the user pages back and forth.</p>
*
* <p>You should keep this limit low, especially if your pages have complex layouts.
* This setting defaults to 1.</p>
*
* @param limit How many pages will be kept offscreen in an idle state.
*/
4 这里还没有找到很好地方案;
时间换空间
空间换时间
方案一:
如果,你想要预加载的话,现在还没有很好地方案;
方案二:
禁用Viewpager 的预加载, 只能修改源码!
自己搜一下吧!很简单的!
这是禁掉预加载之后的ViewPager
对于显示的效果上 是很有影响的,用户的体验度有一定的影响,很多时候 鱼与熊掌不可兼得!
Labels:
Android
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment