Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android setOffscreenPageLimit()如何通过保留更多屏幕外片段来提高ViewPager性能?_Android_Animation_Android Fragments_Android Viewpager - Fatal编程技术网

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个片段,第三个片段与第一次调用后的第二个片段重叠,我如何避免?