Ảnh chụp nhanh Tác vụ

Ảnh chụp nhanh nhiệm 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ư Bề mặt đã 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 tác vụ 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 hủy các bề mặt của hoạt động đó miễn là hoạt động đó nằm ở trên cùng của tác vụ. Nếu hoạt động này phải được hiển thị lại, Trình quản lý cửa sổ có thể bắt đầu hoạt ảnh mà không cần đợi hoạt động vẽ xong khung đầu tiên vì nó có thể sử dụng Bề mặt đã lưu này.

Ngành kiến ​​​​trúc

Hai khái niệm về Hình thu nhỏ gần đây và Bề mặt đã lưu được hợp nhất với Ảnh chụp nhanh 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 GraphicBuffer. Miễn là ứng dụng của hoạt động hàng đầu của tác vụ vẫn còn trong bộ nhớ thì GraphicBuffer này sẽ được giữ lại trong bộ nhớ. Bây giờ, khi hoạt động tương tự được đưa lên phía trước một lần nữa, 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 sau khi hoạt động vẽ xong khung hình đầu tiên, cửa sổ bắt đầu Ảnh chụp nhanh nhiệm vụ sẽ mờ dần giống như các màn hình giật gân thông thường.

GraphicBuffer tương tự cũng được gửi qua Binder tới SystemUI để sử 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 tham chiếu đến bộ đệm nên việc gửi nó qua chất kết dính sẽ tiêu tốn ít tài nguyên. Khi GraphicBuffer đến SystemUI, nó được gói vào một Bitmap phần cứng và sau đó được vẽ lên màn hình mà không cần tải bất kỳ bộ nhớ nào lên bộ nhớ đồ họa.

Những lợi ích

Có ba lợi ích chính cho kiến ​​trúc mới này:

  • Nếu ảnh chụp nhanh nhiệm vụ được sử dụng làm cửa sổ bắt đầu thì sẽ có sự giao thoa đẹ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, nó có thể được thực hiện mà không cần sao chép. Trước đây bitmap phải được sao chép vào Ashmem, sau đó vào bộ nhớ đồ họa. Vì phương pháp này lưu ảnh chụp nhanh trực tiếp vào bộ nhớ đồ họa nê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. Có cùng bộ đệm ở đây cũng giúp tiết kiệm rất nhiều bộ nhớ. Đó là lý do tại sao tính năng 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, nó đã giảm mẫu xuống 64% để tiết kiệm bộ nhớ.

Thực hiện

Tính năng này tồn tại hoàn toàn trên nền tảng Android. Không cần tích hợp và không hỗ trợ tùy 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 chức năng này:

frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java#215

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à độ phân giải 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 tác vụ từ đĩa, ảnh chụp nhanh có độ phân giải thấp sẽ được đọc trước tiên, sau đó được thay thế bằng ảnh chụp nhanh có độ phân giải cao. Tối ưu hóa này cải thiện thời gian tải hình ảnh. Nếu không, có thể có một chút chậm trễ 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ị lớp phủ overlay/frameworks/base/core/res/res/values/config.xml bằng cách đặt config_highResTaskSnapshotScaleconfig_lowResTaskSnapshotScale . Theo mặc định, chúng được đặt tương ứng là 1,0 và 0,5. Tắt ảnh chụp nhanh 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 tệp TaskSnapshot* trong:

frameworks/base/+/main/services/core/java/com/android/server/wm/