Snapshot tugas

Snapshot Tugas adalah infrastruktur yang diperkenalkan di Android 8.0 yang menggabungkan screenshot untuk Thumbnail Terbaru serta Platform Tersimpan dari Pengelola Jendela. Thumbnail Terbaru mewakili status terakhir tugas dalam tampilan Terbaru.

Saat aktivitas beralih ke status berhenti, Pengelola Jendela tidak menghancurkan platform aktivitas selama aktivitas tersebut berada di bagian atas tugas. Jika aktivitas ini harus ditampilkan lagi, Pengelola Jendela dapat memulai animasi tanpa menunggu aktivitas selesai menggambar frame pertamanya, karena aktivitas tersebut dapat menggunakan Platform Tersimpan ini.

Arsitektur

Dua konsep Thumbnail Terbaru dan Platform Tersimpan disatukan dengan Snapshot Tugas. Saat tugas beralih ke latar belakang, Pengelola Jendela menempatkan screenshot tugas ini ke dalam GraphicBuffer. Selama aplikasi aktivitas utama tugas tetap ada dalam memori, GraphicBuffer ini akan dipertahankan dalam memori. Sekarang, saat aktivitas yang sama ditampilkan lagi, Window Manager akan membuat jendela awal (TaskSnapshotSurface), dan melampirkan GraphicBuffer tanpa menyalin memori apa pun ke antrean buffering jendela awal. Segera setelah aktivitas menggambar frame pertamanya, jendela awal Task Snapshot akan memudar dengan lancar seperti layar pembuka biasa.

GraphicBuffer yang sama juga dikirim melalui Binder ke SystemUI untuk digunakan menggambar status pratinjau tugas di tampilan Terbaru. Karena ini hanya referensi ke buffer, mengirimkannya melalui binder akan menghabiskan sedikit resource. Saat tiba di SystemUI, GraphicBuffer digabungkan ke dalam Bitmap hardware, lalu digambar ke layar tanpa upload memori ke memori grafis.

Manfaat

Ada tiga manfaat utama dari arsitektur baru ini:

  • Jika snapshot tugas digunakan sebagai jendela awal, akan ada crossfade yang bagus antara snapshot dan konten sebenarnya.
  • Saat snapshot tugas digambar di SystemUI, hal itu dapat dilakukan tanpa penulisan ulang. Sebelumnya, bitmap harus disalin ke Ashmem, lalu ke memori grafik. 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 buffering yang sama di sini juga menghemat banyak memori. Itulah sebabnya Terbaru kini dapat menampilkan gambar ini dalam resolusi penuh. Sebelumnya, gambar didownsample sebesar 64% untuk menghemat memori.

Implementasi

Fitur ini sepenuhnya ada di platform Android. Tidak diperlukan integrasi, dan penyesuaian tidak didukung. Namun, produsen perangkat dapat menonaktifkan fitur Ringkasan 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 rendah

Snapshot tugas ditulis ke disk dalam dua skala. Saat memulihkan snapshot tugas dari disk, snapshot beresolusi rendah dibaca terlebih dahulu, lalu diganti dengan snapshot 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 menetapkan config_highResTaskSnapshotScale dan config_lowResTaskSnapshotScale. Secara default, nilai ini ditetapkan ke 1,0 dan 0,5. Nonaktifkan snapshot beresolusi rendah dengan menetapkan 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/