Viewpager + FragmentpagerAdapet + Fragments + Listview = безумно медленное приложение

У меня есть viewpager в моем макете, что viewpager содержит набор из 10 фрагментов. Каждый фрагмент имеет вид списка, который асинхронно заполняется. В настоящее время я использую FragmentPagerAdapter в качестве адаптера для viewpager, а вызовы API для заполнения списка отображаются в onCreateView каждого фрагмента. Салфетки безумно медленны, и приложение закрывается из-за проблем с памятью.

Как добиться плавного и отзывчивого (viewpager + listview), такого как Google Play? Плавное считывание + хороший кеш элементов списка?

enter image description here

Ответ 1

Существует множество способов улучшить производительность ViewPager, интегрированного с ListView.

Сначала измените PagerAdapter с FragmentPagerAdapter на FragmentStatePagerAdapter. Разница в том, что вы загружаете 10 страниц в пейджер. И если вы пройдете через все, менеджер будет помещать только страницы в onStop(), поэтому он зарезервирует место. Однако использование FragmentStatePagerAdapter приведет к уничтожению этих страниц, но сохранит их экземпляр с помощью метода onSaveInstanceState. Поэтому, когда вы вернетесь, загрузка не займет много времени, и вы сохраните память.

Обычно FragmentPagerAdapter используется с 3 страницами или меньше.

Второй способ повысить производительность (но он разряжает батарею быстрее) добавляет эту строку к вашему AndroidManifest.xml под вашим тегом приложения:

android:hardwareAccelerated="true"

Третий способ - обнаружение жестов салфетки. Вы можете сделать это, выполнив onPageChangeListener, а затем в реализованном методе onPageScrollStateChanged вы проверите, есть ли страница Idle, затем добавьте ListView. В противном случае остановите использование ListView и перейдите к следующей странице. Вот более качественное объяснение этого момента.

Надеемся, что некоторые из этих пунктов помогут вам достичь лучшей производительности.