2013-01-19 4 views
12

오늘 PagerAdapter가 많은 시간 호출되었다는 것을 알았습니다. 나는 페이지를 천천히 스크롤 할 때 393을 계산했다. 나는 this question을 보았다. 그러나 그것은 정말로 나에게 좋은 대답을 제공하지 않았다. 왜 그것이 getCount 메소드가 너무 자주 호출되도록하면왜 PagerAdapter에서 getCount가 여러 번 호출 되었습니까?

  1. 이 정상적인 동작
  2. 인가?

제공된 질문에서보다 포괄적 인 대답을 찾고 있습니다. 나는 또한 그것을 빨리 유지해야하며 그것이 어떻게 부름 받았는지에 대한 통제력이 없다는 것을 깨닫는다. 그러나 그것은 여기서 질문이 아니다.

+0

'ViewPager'에 대한 소스 코드를 읽고 질문에 대한 답을 찾으려면 무엇을 배웠습니까? – CommonsWare

+0

@CommonsWare 나는 그것이 여러 장소에서 사용된다는 것을 배웠다. 특히 OnTouchEvent입니다. 호출기를 이동할 때마다 호출되는 위치를 추측합니다. 이 올바른지? – Qw4z1

+3

이 영역에서'ViewPager'를 보지 않았습니다. 모든 터치 이벤트에서'getCount()'가 호출된다면, 확실히 높은 콜 카운트를 설명 할 것입니다. – CommonsWare

답변

4

결론적으로 onTouchEvent에서 많이 사용됩니다. OnTouchEvent는 화면과 상호 작용할 때마다 호출됩니다. 즉 터치 이동 및 놓기 이벤트를 의미합니다. 한 픽셀 만 이동하면이 메서드가 호출 될 수 있습니다.

설명 할 내용이 많지 않습니다. 구현 방법입니다. 일반적으로 adapter.getCount는 List.getSize 또는 Cursor.getCount와 같이 구현됩니다. 그리고 거의 제로 오버 헤드가 있습니다. 이것이 문제라면 ListAdapter.getCount 메소드를 최적화하고 카운트 또는 이와 유사한 것을 캐시하십시오. 필요한 경우에만 복잡한 작업을 수행하고 결과가 무효가 될 때까지 캐시하십시오.

관련 문제