2013-01-19 17 views
12

Zauważyłem dzisiaj, że PagerAdapter jest nazywany dużą ilością razy. Policzyłem 393 podczas powolnego przewijania stron. Widziałem this question, ale tak naprawdę nie dostarczyłem mi dobrej odpowiedzi.Dlaczego getCount jest wywoływany tyle razy w PagerAdapter?

  1. Czy to normalne zachowanie
  2. Jeśli tak, to dlaczego jest tak, że metoda getCount nazywa się tak często?

Dla jasności, szukam szerszej odpowiedzi, niż ta podana w pytaniu. Ja również zdaję sobie sprawę, że muszę go trzymać tak szybko i że nie mam żadnej kontroli nad tym, jak się go nazywa, ale to nie jest kwestia tutaj.

+0

Po przeczytaniu kodu źródłowego do 'ViewPager', aby znaleźć odpowiedzi na swoje pytania, czego się nauczyłeś? – CommonsWare

+0

@CommonsWare Dowiedziałem się, że jest on używany w kilku miejscach. OnTouchEvent w szczególności. Zgaduję, że to jest miejsce, w którym jest wywoływane za każdym razem, gdy poruszam pageriem. Czy to jest poprawne? – Qw4z1

+3

Nie patrzyłem na "ViewPager" w tym obszarze. Jeśli '' getCount() 'jest wywoływany w każdym zdarzeniu dotykowym, to z pewnością wyjaśniłoby to wysoką liczbę połączeń. – CommonsWare

Odpowiedz

4

Jak sam stwierdziłeś, jest on często używany w onTouchEvent. OnTouchEvent jest wywoływany za każdym razem, gdy wchodzisz w interakcję z ekranem, co oznacza ruchy dotykiem i wydawanie. Przesunięcie o jeden piksel spowodowałoby potencjalne wywołanie tej metody.

Nie ma o wiele więcej do wyjaśnienia, tylko sposób w jaki jest realizowany. Zwykle adapter.getCount jest zaimplementowany z czymś takim jak List.getSize lub Cursor.getCount. I prawie zerowy narzut. Jeśli jest to problem, zoptymalizuj metodę ListAdapter.getCount, zrób cache count lub coś w tym stylu. W razie potrzeby wykonuj skomplikowane operacje i buforuj wynik, aż stanie się on nieważny.

Powiązane problemy