Android番外篇 ViewPager.setOffscreenPageLimit()

Posted 彭老希

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android番外篇 ViewPager.setOffscreenPageLimit()相关的知识,希望对你有一定的参考价值。

一、前言

问题缘由:ViewPager.setOffscreenPageLimit()设置的预加载数量

setOffscreenPageLimit() 方法设置的默认值是 1

(1)ViewPager 会预加载几页
(2)ViewPager 会缓存 2*n+1 页(n为设置的值)

如设置为n=1,当前在第一页,会预加载第二页,滑倒第二页,会预加载第三页,当滑倒第三页,第一页会销毁,第四页会加载。

所以ViewPager 中Fragment的生命周期:

setOffscreenPageLimit 的值影响的是 onViewDestory 方法

当缓存的 fragment 超过 setOffscreenPageLimit 设置的值后,那些 fragment 的onViewDestory 方法会回调

当然不想切换的时候去重新创建Fragment,可以将适配器FragmentPagerAdapter的方法重写就好

在这里插入图片描述

二、懒加载的实现

setOffscreenPageLimit方法的默认值为1

优点:Viewpage至少会预加载一页

缺点:比如当前页面有网络请求之类的,预加载的页面也有,就会导致许多任务在等待,影响当前页面的数据请求。

所以应该可见的时候去请求数据,本来想设置这个方法setOffscreenPageLimit的值为0 ,以为可以解决,但是查看了源码看到当设置为0或者负数的时候,都会返回的1,所以无效:

在这里插入图片描述
Fragment 里面有个方法 setUserVisibleHint(boolean isVisibleToUser) 方法,这个方法可以判断当前页面是否对用户可见。

在这里插入图片描述

在这个方法里面具体去处理数据的加载就可以了

以上是关于Android番外篇 ViewPager.setOffscreenPageLimit()的主要内容,如果未能解决你的问题,请参考以下文章

Android番外篇 LruCache缓存机制

Android番外篇 RecyclerView 移除飞行效果动画

Apache Cordova开发Android应用程序——番外篇

Android番外篇 Glide获取图片PathBitmap用法详解

Android番外篇 Android Studio 右上角Gradle不显示 Task

Android番外篇 Android Studio 右上角Gradle不显示 Task