Trong mã nguồn của Activity.java, tôi thấy một số phương pháp dưới đây:Tránh nội Getters/setters
public View findViewById(int id) {
return getWindow().findViewById(id);
}
và định nghĩa của phương pháp GetWindow:
public Window getWindow() {
return mWindow;
}
Nhưng như các quy tắc sau đây:
Tránh nội Getters/setters
Trong các ngôn ngữ bản địa như C++, nó là thực hành phổ biến để sử dụng getters (ví dụ: i = getCount()) thay vì truy cập trực tiếp vào trường (i = mCount). Đây là một thói quen tuyệt vời cho C++, bởi vì trình biên dịch thường có thể truy cập vào quyền truy cập và nếu bạn cần hạn chế hoặc truy cập trường gỡ lỗi, bạn có thể thêm mã bất kỳ lúc nào.
Trên Android, đây là một ý tưởng tồi. Cuộc gọi phương thức ảo rất tốn kém, nhiều hơn so với trường hợp ví dụ tra cứu. Việc theo dõi lập trình hướng đối tượng phổ biến thực hành và có getters và setters trong giao diện công khai, nhưng trong một lớp học bạn phải luôn truy cập trực tiếp vào các trường .
Nếu không có JIT, truy cập trực tiếp vào trường là khoảng 3x nhanh hơn gọi số getter tầm thường. Với JIT (trong đó truy cập trực tiếp trường có giá rẻ như truy cập một địa phương), trường trực tiếp quyền truy cập nhanh hơn khoảng 7x so với gọi trình thu thập nhỏ. Đây là đúng trong Froyo, nhưng sẽ cải thiện trong tương lai khi JIT vạch ra phương thức getter .
vì vậy tôi muốn biết lý do tại sao nhà phát triển Android không truy cập trực tiếp đối tượng mWindow này? Nếu JIT của các phiên bản Android hiện tại không thể truy cập nội tuyến, getWindow(). FindViewById (id) sẽ tốn nhiều thời gian hơn mWindow.findViewById (id) và findViewById là một phương thức khá thường xuyên được sử dụng.
Cảm ơn bạn trả lời. Tôi chắc chắn gọi findViewById một lần cho mỗi lần xem như bạn đã nói. Có lẽ tôi đã hiểu lầm nguyên tắc, và bây giờ nó rõ ràng. – teok