Tối ưu hoá khung hiển thị tuỳ chỉnh

Khi bạn có một khung hiển thị được thiết kế hợp lý để phản hồi các cử chỉ và hiệu ứng chuyển đổi giữa các trạng thái, hãy đảm bảo khung hiển thị đó chạy nhanh. Để tránh việc giao diện người dùng bị chậm hoặc bị gián đoạn trong quá trình phát, hãy đảm bảo ảnh động luôn chạy ở tốc độ 60 khung hình/giây.

Tăng tốc độ xem

Để tăng tốc chế độ xem của bạn, hãy loại bỏ mã không cần thiết khỏi các quy trình được gọi thường xuyên. Hãy bắt đầu với onDraw(), phiên bản này mang lại cho bạn mức lợi nhuận lớn nhất. Cụ thể, hãy loại bỏ việc phân bổ trong onDraw(), vì việc phân bổ có thể dẫn đến việc thu thập rác gây ra tình trạng gián đoạn. Phân bổ các đối tượng trong quá trình khởi chạy hoặc giữa các ảnh động. Đừng bao giờ phân bổ khi ảnh động đang chạy.

Ngoài việc làm cho onDraw() gọn gàng hơn, hãy đảm bảo nó được gọi ít thường xuyên nhất có thể. Hầu hết các lệnh gọi đến onDraw() đều là kết quả của lệnh gọi đến invalidate(), vì vậy, hãy loại bỏ các lệnh gọi không cần thiết đến invalidate().

Một thao tác rất tốn kém khác là truyền tải các bố cục. Khi một khung hiển thị gọi requestLayout(), hệ thống giao diện người dùng Android sẽ truyền tải toàn bộ hệ phân cấp khung hiển thị để tìm hiểu kích thước cần thiết của mỗi khung hiển thị. Nếu tìm thấy các phép đo xung đột, công cụ này có thể truyền tải hệ phân cấp nhiều lần. Đôi khi, các nhà thiết kế giao diện người dùng tạo hệ phân cấp sâu các đối tượng ViewGroup lồng nhau. Các hệ phân cấp khung hiển thị sâu này gây ra vấn đề về hiệu suất, vì vậy, hãy tạo hệ phân cấp khung hiển thị càng nông càng tốt.

Nếu bạn có một giao diện người dùng phức tạp, hãy cân nhắc viết một ViewGroup tuỳ chỉnh để thực hiện bố cục của giao diện đó. Không giống như các khung hiển thị tích hợp sẵn, khung hiển thị tuỳ chỉnh của bạn có thể đưa ra các giả định dành riêng cho ứng dụng về kích thước và hình dạng của các khung hiển thị con và do đó tránh truyền tải các khung hiển thị con để tính toán các phép đo.

Ví dụ: nếu có một ViwGroup tuỳ chỉnh không điều chỉnh kích thước riêng cho phù hợp với tất cả các thành phần hiển thị con, thì bạn sẽ tránh được hao tổn khi đo lường tất cả các thành phần hiển thị con. Bạn không thể tối ưu hoá nếu sử dụng bố cục tích hợp sẵn phục vụ cho nhiều trường hợp sử dụng.