Ảnh chụp nhanh tác vụ là cơ sở hạ tầng được giới thiệu trong Android 8.0, kết hợp ảnh chụp màn hình cho Hình thu nhỏ gần đây cũng như Mặt sau đã lưu từ Trình quản lý cửa sổ. Hình thu nhỏ Gần đây thể hiện trạng thái cuối cùng của một việc cần làm trong chế độ xem Gần đây.
Khi một hoạt động chuyển sang trạng thái đã dừng, Trình quản lý cửa sổ sẽ không huỷ bỏ các giao diện của hoạt động đó miễn là hoạt động đó nằm ở đầu tác vụ. Nếu phải hiển thị lại hoạt động này, Trình quản lý cửa sổ có thể bắt đầu ảnh động mà không cần chờ hoạt động hoàn tất việc vẽ khung đầu tiên, vì có thể sử dụng Surface đã lưu này.
Kiến trúc
Hai khái niệm Hình thu nhỏ gần đây và Khu vực đã lưu được hợp nhất với Bản tổng quan nhanh về tác vụ. Khi một tác vụ chuyển sang chế độ nền, Trình quản lý cửa sổ sẽ đặt ảnh chụp màn hình của tác vụ này vào một GraphicBuffer. Miễn là ứng dụng của hoạt động hàng đầu trong tác vụ vẫn nằm trong bộ nhớ, thì GraphicBuffer này sẽ được giữ lại trong bộ nhớ. Bây giờ, khi cùng một hoạt động được đưa trở lại nền trước, Trình quản lý cửa sổ sẽ tạo một cửa sổ bắt đầu (TaskSnapshotSurface) và đính kèm GraphicBuffer mà không sao chép bất kỳ bộ nhớ nào vào hàng đợi bộ đệm của cửa sổ bắt đầu. Ngay khi hoạt động vẽ khung hình đầu tiên, cửa sổ bắt đầu của Bản tổng quan nhanh về tác vụ sẽ mờ dần một cách mượt mà như màn hình chờ thông thường.
Cùng một GraphicBuffer cũng được gửi qua Binder đến SystemUI để dùng vẽ trạng thái xem trước của một tác vụ trong chế độ xem Gần đây. Vì đây chỉ là một tệp tham chiếu đến vùng đệm, nên việc gửi tệp tham chiếu này qua liên kết sẽ tiêu tốn ít tài nguyên. Khi đến SystemUI, GraphicBuffer sẽ được gói vào một Bitmap phần cứng, sau đó được vẽ lên màn hình mà không cần tải bộ nhớ lên bộ nhớ đồ hoạ.
Lợi ích
Cấu trúc mới này có ba lợi ích chính:
- Nếu ảnh chụp nhanh tác vụ được dùng làm cửa sổ bắt đầu, thì sẽ có hiệu ứng chuyển tiếp đẹp mắt giữa ảnh chụp nhanh và nội dung thực.
- Khi ảnh chụp nhanh tác vụ được vẽ trong SystemUI, bạn có thể thực hiện việc này mà không cần sao chép. Trước đây, bạn phải sao chép bitmap vào Ashmem, sau đó vào bộ nhớ đồ hoạ. Vì phương thức này lưu trữ bản tổng quan nhanh trực tiếp trong bộ nhớ đồ hoạ, nên bạn không cần sao chép.
- Trạng thái bạn thấy trong phần Gần đây luôn khớp với trạng thái bạn sẽ thấy lần đầu tiên khi mở lại ứng dụng. Việc có cùng một vùng đệm ở đây cũng giúp tiết kiệm nhiều bộ nhớ. Đó là lý do tại sao phần Gần đây hiện có thể hiển thị những hình ảnh này ở độ phân giải đầy đủ. Trước đây, tỷ lệ lấy mẫu đã giảm 64% để tiết kiệm bộ nhớ.
Triển khai
Tính năng này hoàn toàn tồn tại trong nền tảng Android. Không yêu cầu tích hợp và không hỗ trợ tuỳ chỉnh. Tuy nhiên, nhà sản xuất thiết bị có thể tắt hoàn toàn tính năng Ảnh chụp nhanh tác vụ.
Để tắt tính năng này, hãy sửa đổi hàm này:
frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java#215
Xin lưu ý rằng nếu tính năng này bị tắt, chế độ xem Gần đây sẽ không hiển thị bất kỳ hình thu nhỏ nào.
Ảnh chụp nhanh có độ phân giải cao và thấp
Ảnh chụp nhanh tác vụ được ghi vào ổ đĩa ở hai tỷ lệ. Khi khôi phục ảnh chụp nhanh của tác vụ từ ổ đĩa, hệ thống sẽ đọc ảnh chụp nhanh có độ phân giải thấp trước, sau đó thay thế bằng ảnh chụp nhanh có độ phân giải cao. Tính năng tối ưu hoá này cải thiện thời gian tải hình ảnh. Nếu không, có thể có độ trễ nhỏ khi đọc tệp ảnh chụp nhanh từ đĩa và người dùng sẽ thấy một thẻ tác vụ trống cho đến khi có hình ảnh. Bạn có thể định cấu hình tỷ lệ trong tệp cấu hình lớp phủ thiết bịoverlay/frameworks/base/core/res/res/values/config.xml
bằng cách đặt config_highResTaskSnapshotScale
và config_lowResTaskSnapshotScale
. Theo mặc định, các giá trị này được đặt thành 1.0 và 0.5 tương ứng. Tắt bản lưu toàn cảnh có độ phân giải thấp bằng cách đặt config_lowResTaskSnapshotScale
thành 0.0.
Ví dụ và nguồn
Tìm phần còn lại của mã cho tính năng này trong các tệp TaskSnapshot* trong:
frameworks/base/+/main/services/core/java/com/android/server/wm/