W jaki sposób setOffscreenPageLimit () poprawia wydajność ViewPager, zachowując więcej fragmentów poza ekranem?
mamViewPager
kontrolowanie pięciuFragments
. Kiedy machnę odFragment
w indeksie 1 doFragment
przy indeksie 0,jest krótka przerwa w animacji które chciałbym wyeliminować.
Obecnie nie dzwonięsetOffscreenPageLimit()
, więc to wiemFragment
0 jest przechowywane w pamięci przezViewPager
kiedy jestem naFragment
1 w stanie bezczynności, ponieważ limit strony poza ekranem domyślnie wynosi 1 (jeden po obu stronach prądu)Fragment
).
Oto, gdzie staje się mylące. Jeśli zadzwonięsetOffscreenPageLimit(4)
na moimViewPager
, przerwa w animacji od 1 do 0 zniknęła - animacja jest płynna.
Dlatego dochodzę do wniosku, że tak się trzymamFragments
2-4 w pamięci poprawia animację zFragment
1 doFragment
0.
Jak zachowaćFragments
2-4 poprawić animację przesuwania zFragment
1 doFragment
0?
Edytować
Uruchomiłem TraceView, używająconPageScrollStateChanged(int state)
określić, kiedy rozpocząć i zatrzymać śledzenie, w następujący sposób:
@Override
public void onPageScrollStateChanged(int state) {
if (state == 1 && mViewPager.getCurrentItem() == 1) {
Debug.startMethodTracing("ViewPagerTesting", 100000000);
}
if (state == 0 && mViewPager.getCurrentItem() == 0) {
Debug.stopMethodTracing();
}
}
Wygląda na to, żeViewPager
metody dostępności powodują zamrożenie wątku interfejsu użytkownika. Kiedy dzwonięsetOffscreenPageLimit(4)
w ViewPager te metody ułatwień dostępu znajdują się na samym dole śladu - nie ma czasu na ukończenie.
Co powoduje opóźnienie?