2012-09-11 35 views
13

Điều quan trọng đối với hiệu suất có ViewHolder là tĩnh trong một ViewHolder pattern?Điều quan trọng đối với hiệu năng là có ViewHolder là tĩnh trong một mẫu ViewHolder?

cửa hàng đối tượng A ViewHolder mỗi quan điểm thành phần bên trong lĩnh vực thẻ của bố cục, vì vậy bạn có thể truy cập ngay lập tức họ mà không có sự cần phải nhìn chúng lên nhiều lần. Trước tiên, bạn cần tạo lớp học để giữ tập hợp chế độ xem chính xác của mình. Ví dụ:

static class ViewHolder { 
    TextView text; 
    TextView timestamp; 
    ImageView icon; 
    ProgressBar progress; 
    int position; 
} 

Trả lời

8

Nó không quan trọng đối với hiệu suất, đó là về cách sử dụng. Nếu ViewHolder lớp học sẽ không tĩnh - bạn phải cung cấp bản sao của lớp cha mẹ:

No enclosing instance of type Type is accessible. 
Must qualify the allocation with an enclosing instance of type Type 
(e.g. x.new A() where x is an instance of Type). 
+10

Điều gì sẽ xảy ra nếu lớp ViewHolder được sử dụng bên trong chính lớp bộ điều hợp? Sau đó, bạn không phải cung cấp một thể hiện của lớp cha mẹ ... –

+4

Vâng, bạn không. – Jin35

+0

Nhưng điều đó có thể làm rò rỉ bộ điều hợp như được chỉ ra trong http://stackoverflow.com/questions/10864853/when-exactly-is-it-leak-safe-to-use-anonymous-inner-classes – divyenduz

1

Edit: hiểu lầm câu hỏi - có vẻ như bạn đang yêu cầu cụ thể về làm cho nó static. Điều đó không quan trọng đối với hiệu suất, nhưng ý tưởng là mọi thứ đều giúp ích.

cuối cùng chỉnh sửa ở đây: Static nested class in Java, why?

====

Orig câu trả lời dưới đây:

Nó rất đẹp để siết chặt hoạt động ra khỏi một ListView nặng (hoặc một số loại khác của tái chế AdapterView). Tuy nhiên cách tốt nhất để nói sẽ là để hồ sơ hiệu suất bằng cách nào đó.

Cũng tại Google IO 2010 họ đề nghị phương pháp này:

http://www.youtube.com/watch?v=wDBM6wVEO70

Edit:

Ngoài ra đây là một liên kết đến traceview để cấu hình việc thực hiện, mặc dù tôi không chắc chắn như thế nào cũng nó công trinh.

http://developer.android.com/tools/debugging/debugging-tracing.html

-2

Không bắt buộc phải làm như vậy. Nhưng khi bạn sử dụng để làm như thế này, bạn đang sử dụng các khung nhìn một lần nữa khi xem bộ điều hợp của bạn là null. Bạn đang tạo một khung nhìn và gán các giá trị cho phần khung nhìn và gắn thẻ toàn bộ khung nhìn bằng cách sử dụng ViewHolder lớp tĩnh. Vì vậy, khi bạn quay lại và xem không phải là null, thì phần hiển thị sẽ đến từ để lấy thẻ. Đây là cách bạn sẽ tạo ít đối tượng cũng như tải công việc ít hơn trên bộ điều hợp.

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