Cuplikan Tugas

Task Snapshots adalah infrastruktur yang diperkenalkan di Android 8.0 yang menggabungkan screenshot untuk Thumbnail Terbaru serta Permukaan Tersimpan dari Window Manager. Gambar Mini Terbaru menunjukkan status tugas terakhir dalam tampilan Terbaru.

Saat aktivitas masuk ke status berhenti, Window Manager tidak menghancurkan permukaan aktivitas selama aktivitas itu berada di atas tugas. Jika aktivitas ini harus ditampilkan lagi, Window Manager dapat memulai animasi tanpa menunggu aktivitas selesai menggambar bingkai pertamanya, karena dapat menggunakan Permukaan Tersimpan ini.

Arsitektur

Dua konsep Thumbnail Terbaru dan Permukaan Tersimpan disatukan dengan Cuplikan Tugas. Saat tugas masuk ke latar belakang, Window Manager menempatkan tangkapan layar tugas ini ke dalam GraphicBuffer. Selama penerapan aktivitas teratas dari 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 ke antrian buffer dari jendela awal. Segera setelah aktivitas menggambar bingkai pertamanya, jendela mulai Snapshot 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 hanya referensi ke buffer, mengirimkannya melalui binder 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 dari arsitektur baru ini:

  • Jika snapshot tugas digunakan sebagai jendela awal, ada crossfade yang bagus antara snapshot dan konten sebenarnya.
  • Saat snapshot tugas digambar 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 di memori grafis, tidak diperlukan penyalinan.
  • 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 Recents sekarang dapat menampilkan gambar-gambar ini dalam resolusi penuh. Sebelumnya, itu turun sampel sebesar 64% untuk menghemat memori.

Penerapan

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

Untuk menonaktifkan fitur ini, ubah fungsi ini:

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

Perhatikan bahwa jika fitur 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 digantikan oleh rekan 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 timbangan di overlay perangkat config file overlay/frameworks/base/core/res/res/values/config.xml dengan menyetel config_highResTaskSnapshotScale dan config_lowResTaskSnapshotScale . Secara default, ini diatur ke 1,0 dan 0,5 masing-masing. Nonaktifkan snapshot beresolusi rendah dengan mengatur config_lowResTaskSnapshotScale ke 0.0.

Contoh dan sumber

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

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