一、实现方式
ViewPager内部是通过继续ViewGroup来实现的,ViewPager2内部是通过RecyclerView来实现的(服从更高)
二、支持方向
ViewPager只能横向滑动,ViewPager2可以横向以及竖向滑动
三、接纳的适配器
ViewPager有两个适配器分别是FragmentStatePagerAdapter和FragmentPagerAdapter,都集成自PagerAdpter
FragmentStatePagerAdapter:不可以缓存,Fragment离开屏幕时,该适配器会烧毁该Fragment并释放其资源,而在Fragment重新进入屏幕时,该适配器又会重新创建该Fragment。这种管理方式适当于Fragment数量较多或占用内存较大的环境,由于它可以在不必要的Fragment上释放内存。但是这也会导致Fragment的状态丢失,必要在Fragment中保存和规复状态。
FragmentPagerAdapter:可以缓存,在Fragment离开屏幕时,该适配器并不会烧毁该Fragment,而是将其保存在内存中,以便下一次使用时可以直接取出。
这种管理方式适当于Fragment数量较少或占用内存较小的环境,由于它可以克制频仍的Fragment烧毁和重建,进步了性能。但是假如Fragment数量过多,可能会导致内存占用过高,从而引发内存溢出等问题。
总结:假如必要管理大量或占用内存较大的Fragment,应该选择FragmentStatePagerAdapter;假如Fragment数量较少或占用内存较小,应该选择FragmentPagerAdapter。
ViewPager2只有一个适配器FragmentStateAdapter,集成自RecyclerView.Adapter,该适配器有以下特点
1.FragmentStateAdapter在碰到预加载时,只会创建Fragment对象,不会把Fragment真正的到场到布局中,以是自带懒加载效果;
2.FragmentStateAdapter不会不绝保留Fragment实例,回收的ItemView也会移除Fragment,以是得做好Fragment重建后规复数据的预备;
3.FragmentStateAdapter在碰到offscreenPageLimit>0时,处理离屏Fragment和可见Fragment没有什么区别,以是无法通过setUserVisibleHint判断表现与否。
四、功能支持
ViewPager有两个毛病
1、不能关闭预加载
2、更新adapter不见效
我们在加载数据的时候,viewpager默认会帮我们预加载前后两个页面的数据,并且这2个view是不可见的。
由于viewpager对offscreenPageLimit做了限制,默认设置为1,因此页面的预加载不可克制。这也轻易造成资源浪费。
一般使用viewpager与frament共同使用,使用fragment的setUserVisibleHint方法,来实现控制数据懒加载。而布局只能提前进入(预布局)。
ViewPager2离屏加载和预加载
ViewPager2的预加载与离屏加载在view层面有着本质的区别,离屏加载的view已经添加到parent上,而预加载只是预备了布局,并没有加载到parent上。
1.ViewPager2默认是开启预加载关闭离屏加载的,可能会预加载一条数据,而离屏加载即设置offscreenPageLimit为0。
2.ViewPager2设置offscreenPageLimit为1时,在第1页会加载2条数据,每滑动一页,都会加载下一页数据,直到第五页,会移除第一页数据。
ViewPager2内部实现了懒加载,通过Lifecycle对Fragment的生命周期举行管理。而ViewPager必要自己实现懒加载。
ViewPager2提供了一些新的功能,如无从右到左(RTL)的布局支持和停用用户输入的功能(setUserInputEnabled、isUserInputEnabled)。
五、对于ItemDecoration的支持不同
ViewPager自身并不支持ItemDecoration,假如必要添加分割线等效果,必要手动实现。而ViewPager2可以直接使用RecyclerView的ItemDecoration来实现分割线等效果。
参考链接:
https://www.cnblogs.com/fangg/p/12768038.html
https://blog.csdn.net/qq_40840459/article/details/132402056
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |