2013-01-19 29 views
12

Tôi nhận thấy hôm nay rằng PagerAdapter được gọi là số lần lớn. Tôi đếm được 393 khi cuộn trang chậm. Tôi thấy this question nhưng nó không thực sự cung cấp cho tôi một câu trả lời hay.Tại sao getCount lại được gọi quá nhiều lần trong PagerAdapter?

  1. là hành vi bình thường này
  2. Nếu vậy, tại sao nó rằng phương pháp getCount được gọi như vậy thường?

Chỉ cần rõ ràng, tôi đang tìm câu trả lời rộng hơn, sau đó là câu trả lời trong câu hỏi được cung cấp. Tôi cũng nhận ra rằng tôi cần giữ nó nhanh và tôi không thể kiểm soát cách nó được gọi, nhưng đó không phải là câu hỏi ở đây.

+0

Khi bạn đọc mã nguồn để 'ViewPager', để tìm câu trả lời cho câu hỏi của bạn, bạn đã học được gì? – CommonsWare

+0

@CommonsWare Tôi đã học được rằng nó được sử dụng ở một số nơi. OnTouchEvent nói riêng. Tôi đoán rằng đây là nơi nó được gọi mỗi khi tôi di chuyển máy nhắn tin. Điều này có đúng không? – Qw4z1

+3

Tôi chưa xem 'ViewPager' trong khu vực này. Tuy nhiên, nếu 'getCount()' được gọi trên mọi sự kiện cảm ứng, điều đó chắc chắn sẽ giải thích số lượng cuộc gọi cao. – CommonsWare

Trả lời

4

Khi bạn kết luận nó được sử dụng rất nhiều trong onTouchEvent. OnTouchEvent được gọi bất cứ khi nào bạn tương tác với màn hình, có nghĩa là di chuyển cảm ứng và phát hành sự kiện. Di chuyển chỉ một pixel sẽ dẫn đến một cuộc gọi tiềm năng đến phương thức này.

Không còn gì để giải thích nữa, nó chỉ là cách nó được triển khai. Thông thường adapter.getCount được thực hiện với một cái gì đó như List.getSize hoặc Cursor.getCount. Và có gần như bằng không. Nếu đây là một vấn đề, hãy tối ưu hóa phương thức ListAdapter.getCount của bạn, lưu bộ nhớ cache hoặc một số thứ tương tự. Chỉ làm những thứ phức tạp trong đó khi cần thiết và cache kết quả cho đến khi nó trở thành không hợp lệ.

Các vấn đề liên quan