setOffscreenPageLimit() 如何通过保留更多屏幕外 Fragment 来提高 ViewPager 性能?

2024-03-25

我有一个ViewPager控制五个Fragments。当我从Fragment在索引 1 到Fragment在索引 0 处,动画中有短暂的停顿我想消除的。

目前,我没有打电话setOffscreenPageLimit(),所以我知道Fragment0 被保存在内存中ViewPager当我在的时候Fragment1 在空闲状态下,因为离屏页面限制默认为 1(当前页面两侧各一个)Fragment).

这就是令人困惑的地方。如果我打电话setOffscreenPageLimit(4) on my ViewPager, 从 1 到 0 动画滑动的停顿消失了——动画很流畅.

因此,我的结论是,以某种方式,保持Fragments内存中的 2-4 改进了动画Fragment 1 to Fragment 0.

怎样保留Fragments2-4 改进滑动动画Fragment 1 to Fragment 0?

Edit

我运行 TraceView,使用onPageScrollStateChanged(int state)确定何时开始和停止跟踪,如下所示:

@Override
public void onPageScrollStateChanged(int state) {
    if (state == 1 && mViewPager.getCurrentItem() == 1) {
        Debug.startMethodTracing("ViewPagerTesting", 100000000);
    }

    if (state == 0 && mViewPager.getCurrentItem() == 0) {
        Debug.stopMethodTracing();
    }
}

看来ViewPager的辅助功能方法导致 UI 线程冻结。当我打电话时setOffscreenPageLimit(4)在 ViewPager 上,这些可访问性方法位于跟踪的最下方——完成的时间可以忽略不计。

是什么原因导致延迟?


当您使用默认实现时setOffscreenPageLimit()它只加载其右侧的一个片段。例如。当您位于索引 1 时,内存中加载了索引 2,但没有加载索引 0,因此向左滑动将必须从头开始生成一个新片段。为了测试这个理论,你可能需要使用setOffscreenPageLimit(2)然后尝试滑动索引 1->0。这绝不是最佳解决方案,但有助于消除您对该概念的疑虑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setOffscreenPageLimit() 如何通过保留更多屏幕外 Fragment 来提高 ViewPager 性能? 的相关文章

随机推荐

  • 无法加载时间字符串的 IOSurface。本地渲染而不是 swift 4

    当我运行我的项目时 你能帮我解决这个问题吗 无法加载时间字符串的 IOSurface 改为本地渲染 我不知道我的编码发生了什么 请帮忙 I fixed the problem Select target gt General gt sele
  • 正则表达式匹配数字和字符

    如何创建仅匹配字符和数字的正则表达式 这个正则表达式匹配宽度数字 D g 如何添加类似字符 等等 仅匹配字母和数字 A Za z0 9 将所需的字符添加到上述字符类中 以匹配该特定字符 A Za z0 9 您可以将上述正则表达式减少为 w
  • 渲染表格中的下标/上标(闪亮)

    我在一个闪亮的应用程序中有一个数据表 我想在其中添加上标到我的观察结果中 这些应该详细说明观察结果是否是估计值 以及观察年份距参考年份有多远 此数据已经在我的数据集中 例如 特定的观察结果可能显示 75 上标 3 e 这可能吗 我今天也有同
  • $sce:itype 尝试信任需要字符串的内容中的非字符串值:上下文:resourceUrl

    我想播放存储在我的 sails 服务器中的歌曲 路径是http localhost 4000 images 123 mp3 在前端 我使用 ng repeat 列出来自服务器的歌曲 div div i class fa fa play ci
  • helm 图表中的动态命名空间变量

    我与四个团队合作 他们使用在 kubernetes 命名空间中设置的完全相同的环境 我创建了 helm 图表来安装这些环境 一切正常 但由于主机名格式如下 我必须手动创建入口
  • ClickOnce 快捷方式无法启动应用程序

    我在 VS 2017 中创建了一个使用 ClickOnce 安装的 WPF 应用程序 将解决方案部署到网络位置后 我可以通过访问 application 链接在我的 64 位 Windows 10 计算机上安装 但是 该应用程序安装后无法在
  • 完成时更新整个

    编辑单元格后 我很难重新渲染 PrimeFaces 数据表 更改一个单元格中的值可能会更改其他单元格中的条目 因此需要刷新整个表格 这是 JSF 页面
  • 如何与 Kivy GUI 一起运行 Tornado 事件循环?

    我的客户端应用程序使用KivyGUI Kivy 有自己的事件循环 并使用 WebSocket 协议连接到服务器Tornado Tornado 也有一个事件循环 这就是连接部分是异步的原因 我希望用户在 Tornado 客户端运行监听服务器消
  • 如何删除 NSMutableArray 中具有相同属性值但只有一个的所有对象

    我有一个带有 url 字符串属性和标题的历史对象 我想搜索 URL 包含搜索字符串的对象的所有历史记录 然后删除所有重复项 例子 我有一系列历史对象 其中 20 个都是 https www google com https www goog
  • C# Winforms 复选框不指示焦点

    如果复选框是 Tab 键顺序 0 中的第一个控件 则在显示表单时并不表示它具有焦点 事实上 它确实具有焦点 您可以通过按空格键来选中 取消选中控件来演示这一点 如果您先按 Tab 键 然后按 Shift Tab 键返回到该复选框 则标签会出
  • 闪亮滑块输入从最大到最小

    是否可以制作一个以降序显示值的 sliderInput 从左到右 例如 5 4 3 2 1 runApp list ui fluidPage sliderInput test min 5 max 1 value 3 step 1 serve
  • 在Java中将BufferedImage转换为Mat(OpenCV)[重复]

    这个问题在这里已经有答案了 我试过这个link https stackoverflow com questions 14958643 converting bufferedimage to mat in opencv并有下面的代码 我的程序
  • WPF 窗口不会释放其资源,直到程序终止

    我一直在阅读有关 WPF 内存处理的内容 并跟踪了前 5 个和前 8 个内存泄漏陷阱 但在我目前的情况下没有任何帮助 我的软件有一个问题 WPF 在程序终止之前不会释放内存 如果我永远让它消失 无论我做什么都会导致 OutOfMemoryE
  • PHP - 从文件名字符串中删除扩展名

    我想从文件名中删除扩展名 并获取文件名 例如file xml gt 文件 image jpeg gt 图像 test march txt gt test march 等 所以我写了这个函数 function strip extension
  • 在 irb 中重新加载 ruby​​gems?

    我现在有这个脚本 def r this require this puts this is now loaded rescue LoadError puts The gem this is missing puts Should I ins
  • 为什么 List.ForEach 比标准 foreach 更快?

    考虑一下 必备条件 The alphabet from a z List
  • 如何使用 Erlang 发送推送通知?

    我正在尝试使用 Erlang 向 APNs 发送推送通知 这是我到目前为止想出的代码 module apnstest2 export connect 0 connect gt application start ssl ssl seed s
  • 在Python re中仅匹配unicode字母

    我有一个字符串 我想从中提取 3 个组 19 janvier 2012 gt 19 janvier 2012 月份名称可以包含非 ASCII 字符 因此 A Za z 对我不起作用 gt gt gt import re gt gt gt r
  • R-因子箱线图中的组抖动? [复制]

    这个问题在这里已经有答案了 是否可以将抖动分组到像我这样的箱线图中 以便数据点与每个市场的因素一致 现在它正在按市场名称排列 我给它们上了颜色以显示哪些应该被分组 My code p lt ggplot droplevels subset
  • setOffscreenPageLimit() 如何通过保留更多屏幕外 Fragment 来提高 ViewPager 性能?

    我有一个ViewPager控制五个Fragments 当我从Fragment在索引 1 到Fragment在索引 0 处 动画中有短暂的停顿我想消除的 目前 我没有打电话setOffscreenPageLimit 所以我知道Fragment