Android setOffscreenPageLimit()如何通过保留更多屏幕外片段来提高ViewPager性能?
我有一个Android setOffscreenPageLimit()如何通过保留更多屏幕外片段来提高ViewPager性能?,android,animation,android-fragments,android-viewpager,Android,Animation,Android Fragments,Android Viewpager,我有一个ViewPager控制五个片段。当我从索引1处的Fragment滑动到索引0处的Fragment时,动画中有一个我想消除的短暂停顿 目前,我没有调用setOffscreenPageLimit(),因此我知道Fragment0被ViewPager保存在内存中,而我在Fragment1的空闲状态下,因为屏幕外的页面限制默认为1(当前Fragment两侧的一个) 这就是让人困惑的地方。如果在我的ViewPager上调用setOffscreenPageLimit(4),从1滑动到0动画的暂停消失
ViewPager
控制五个片段
。当我从索引1处的Fragment
滑动到索引0处的Fragment
时,动画中有一个我想消除的短暂停顿
目前,我没有调用setOffscreenPageLimit()
,因此我知道Fragment
0被ViewPager
保存在内存中,而我在Fragment
1的空闲状态下,因为屏幕外的页面限制默认为1(当前Fragment
两侧的一个)
这就是让人困惑的地方。如果在我的ViewPager
上调用setOffscreenPageLimit(4)
,从1滑动到0动画的暂停消失——动画平滑
因此,我得出的结论是,在内存中保留片段
2-4可以将动画从片段
1提高到片段
0
保留Fragment
2-4如何将滑动动画从Fragment
1改进为Fragment
0?
编辑
我运行了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线程冻结。当我在ViewPager上调用setOffscreenPageLimit(4)
时,这些可访问性方法在跟踪过程中处于较低的位置——完成这些方法所需的时间可以忽略不计
是什么原因造成延误的
当您使用默认的
setOffscreenPageLimit()
实现时,它只加载它右边的一个片段。例如,当您在索引1上时,它在内存中加载了索引2,但没有加载索引0,所以向左滑动必须从头生成一个新的片段。要测试此理论,您可能需要使用setOffscreenPageLimit(2)
,然后尝试滑动索引1->0。这绝不是最佳解决方案,但有助于消除您对这个概念的疑虑。使用Traceview并找出答案。@Commonware我制作了一个包含多个选项卡的音乐应用程序。所有选项卡都与ViewPager集成。现在,如果我将其脱机设置为标签的数量。它工作得很好,但当它同时调用resume方法和UI时,它会变得挂起。你知道吗。我想我的问题与这个主题有关,这就是我为什么在这里添加评论的原因。@iDroidExplorer:正如我在评论中所写的,使用Traceview并找出答案。或者使用日志记录并查找。@commonware感谢您的回复。让我检查一下。如果我让stuch参与进来,请帮帮我。。。再次感谢。@Commonware和iDoid资源管理器-面临类似的问题-我使用的是5页的viewpager,应用程序可以完美地前后滑动,但当我使用相同的功能进行无线键盘访问时,它会在某个时候冻结,我试着添加“setOffscreenPageLimit(pages.length);”它在任何地方都不会结冰的情况下开始导航。现在我想说的是,问题已经解决了,但是什么让它得到解决呢?有什么想法吗?我在发帖后自己思考了一下,也得出了这个结论。在片段2中的onResume()
中启动的进程阻塞了UI线程。这有点违反直觉——我最初的反应是片段2的暂停导致了延迟,而不是恢复。@Shakti有办法将片段设置到屏幕外吗?我有3个片段,第三个片段与第一次调用后的第二个片段重叠,我如何避免?