首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >setOffscreenPageLimit()如何通过保留更多的屏幕外片段来提高ViewPager性能?

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

Stack Overflow用户
提问于 2014-01-24 00:31:14
回答 1查看 16.5K关注 0票数 9

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

目前,我没有调用setOffscreenPageLimit(),所以我知道Fragment 0被ViewPager保存在内存中,而在Fragment 1上处于空闲状态,因为屏幕外页面限制默认为1(当前Fragment的任何一侧)。

这就是让人困惑的地方。如果我在我的ViewPager上调用ViewPager,在从1到0的滑动动画中的暂停就消失了--动画是平滑的。

因此,我得出的结论是,将Fragments 2-4保存在内存中可以将动画从Fragment 1提高到Fragment 0。

保留Fragments Fragment 2-4如何提高从Fragment 1到 Fragment 0的滑动动画?

编辑

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

代码语言:javascript
运行
复制
@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线程冻结。当我在ViewPager上调用setOffscreenPageLimit(4)时,这些可访问性方法在跟踪完成所需的时间很少。

是什么导致了延迟?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-24 08:15:18

当您使用setOffscreenPageLimit()的默认实现时,它只加载一个片段,该片段位于它的右侧。就像。当您在索引1上时,它的索引2加载在内存中,而不是索引0,所以左滑动将不得不从零开始生成一个新的片段。要测试这个理论,您可能需要使用setOffscreenPageLimit(2),然后尝试滑动索引1->0。这绝不是最优的解决方案,但将有助于消除您对这一概念的疑虑。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21322207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档