Cuplikan Tugas

Snapshot Tugas adalah infrastruktur yang diperkenalkan di Android 8.0 yang menggabungkan tangkapan layar untuk Thumbnail Terbaru serta Permukaan Tersimpan dari Window Manager. Thumbnail Terkini mewakili keadaan terakhir suatu tugas dalam tampilan Terbaru.

Saat suatu aktivitas berada dalam keadaan berhenti, Window Manager tidak menghancurkan permukaan aktivitas selama aktivitas tersebut berada di puncak tugas. Jika aktivitas ini harus ditampilkan lagi, Window Manager dapat memulai animasi tanpa menunggu aktivitas selesai menggambar frame pertamanya, karena ia dapat menggunakan Permukaan Tersimpan ini.

Arsitektur

Dua konsep Thumbnail Terbaru dan Permukaan Tersimpan disatukan dengan Snapshot Tugas. Saat tugas masuk ke latar belakang, Window Manager menempatkan tangkapan layar tugas ini ke dalam GraphicBuffer. Selama penerapan aktivitas teratas tugas tetap berada di memori, GraphicBuffer ini akan disimpan di memori. Sekarang, ketika aktivitas yang sama dibawa ke depan lagi, Window Manager akan membuat jendela awal (TaskSnapshotSurface), dan melampirkan GraphicBuffer tanpa menyalin memori apa pun ke antrian buffer di jendela awal. Segera setelah aktivitas menggambar bingkai pertamanya, jendela awal Cuplikan Tugas akan memudar dengan mulus seperti layar splash biasa.

GraphicBuffer yang sama juga dikirim melalui Binder ke SystemUI untuk digunakan menggambar status pratinjau tugas dalam tampilan Terbaru. Karena ini hanyalah referensi ke buffer, mengirimkannya melalui binder hanya menghabiskan sedikit sumber daya. Ketika GraphicBuffer tiba di SystemUI, ia dibungkus ke dalam Bitmap perangkat keras dan kemudian digambar ke layar tanpa ada memori yang diunggah ke memori grafis.

Manfaat

Ada tiga manfaat utama arsitektur baru ini:

  • Jika snapshot tugas digunakan sebagai jendela awal, ada crossfade yang bagus antara snapshot dan konten sebenarnya.
  • Ketika snapshot tugas diambil di SystemUI, itu dapat dilakukan tanpa penyalinan apa pun. Sebelumnya bitmap harus disalin ke Ashmem, lalu ke memori grafis. Karena metode ini menyimpan snapshot langsung ke memori grafis, penyalinan tidak diperlukan.
  • Status yang Anda lihat di Terbaru selalu cocok dengan status yang pertama kali Anda lihat saat membuka kembali aplikasi. Memiliki buffer yang sama di sini juga menghemat banyak memori. Itu sebabnya Terkini kini dapat menampilkan gambar-gambar ini dalam resolusi penuh. Sebelumnya, sampelnya diturunkan sebesar 64% untuk menghemat memori.

Penerapan

Fitur ini sepenuhnya ada di platform Android. Tidak diperlukan integrasi, dan penyesuaian tidak didukung. Namun, produsen perangkat dapat menonaktifkan fitur Task Snapshots sepenuhnya.

Untuk menonaktifkan fitur ini, ubah fungsi ini:

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

Perhatikan bahwa jika fitur ini dinonaktifkan, tampilan Terbaru tidak akan menampilkan thumbnail apa pun.

Snapshot beresolusi tinggi dan beresolusi rendah

Snapshot tugas ditulis ke disk pada dua skala. Saat memulihkan snapshot tugas dari disk, snapshot beresolusi rendah dibaca terlebih dahulu, lalu diganti dengan salinan beresolusi tinggi. Pengoptimalan ini meningkatkan waktu pemuatan gambar. Jika tidak, mungkin ada sedikit penundaan saat membaca file snapshot dari disk, dan pengguna akan melihat kartu tugas kosong hingga gambar tersedia. Anda dapat mengonfigurasi skala di file konfigurasi overlay perangkat overlay/frameworks/base/core/res/res/values/config.xml dengan mengatur config_highResTaskSnapshotScale dan config_lowResTaskSnapshotScale . Secara default, ini masing-masing diatur ke 1.0 dan 0.5. Nonaktifkan snapshot resolusi rendah dengan mengatur config_lowResTaskSnapshotScale ke 0.0.

Contoh dan sumber

Temukan kode lainnya untuk fitur ini dalam file TaskSnapshot* di:

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