我有一个ViewPager
控制五个Fragments
。当我从Fragment
在索引 1 到Fragment
在索引 0 处,动画中有短暂的停顿我想消除的。
目前,我没有打电话setOffscreenPageLimit()
,所以我知道Fragment
0 被保存在内存中ViewPager
当我在的时候Fragment
1 在空闲状态下,因为离屏页面限制默认为 1(当前页面两侧各一个)Fragment
).
这就是令人困惑的地方。如果我打电话setOffscreenPageLimit(4)
on my ViewPager
, 从 1 到 0 动画滑动的停顿消失了——动画很流畅.
因此,我的结论是,以某种方式,保持Fragments
内存中的 2-4 改进了动画Fragment
1 to Fragment
0.
怎样保留Fragments
2-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(使用前将#替换为@)