Как setOffscreenPageLimit () улучшает производительность ViewPager, сохраняя больше фрагментов за экраном?

у меня есть ViewPager контрольный пять Fragments. Когда я красть из Fragment при индексе от 1 до Fragment в, индексируют 0, в анимации короткая пауза это я хотел бы исключить.

в настоящее время я не звоню setOffscreenPageLimit(), так что я знаю, что Fragment 0 удерживается в памяти ViewPager, а я Fragment 1 в состоянии простоя, потому что ограничение страницы off screen по умолчанию равно 1 (по обе стороны от текущего Fragment).

здесь это сбивает с толку. Если я позову setOffscreenPageLimit(4) на ViewPager, пауза в салфетки от 1 до 0 анимации исчезла - анимация гладкая.

поэтому я заключаю, что как-то, сохраняя Fragments 2-4 в памяти улучшает анимацию от Fragment 1 к Fragment 0.

как сохранив Fragments 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специальные возможности методы вызывают замораживание потока пользовательского интерфейса. Когда я позову setOffscreenPageLimit(4) на ViewPager эти методы доступности находятся на пути вниз в трассировке - занимает незначительное время, чтобы закончить.

что вызывает задержку?

TraceView

1 ответов


при использовании реализации по умолчанию setOffscreenPageLimit() он загружает только один фрагмент, который находится справа от него. Для EG. когда вы находитесь на индексе 1, он имеет индекс 2, загруженный в память, но не индекс 0, поэтому, проводя влево, придется генерировать новый фрагмент с нуля. Чтобы проверить эту теорию, вы можете использовать setOffscreenPageLimit(2) а затем попробуйте провести индекс 1 - >0. Это никоим образом не является оптимальным решением, но поможет прояснить ваши сомнения относительно концепции.