Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Snapshot Tugas

Snapshots Tugas adalah infrastruktur yang diperkenalkan di Android 8.0 yang menggabungkan tangkapan layar untuk Gambar Mini Terbaru serta Permukaan Tersimpan dari Pengelola Jendela. Thumbnail Terkini mewakili status terakhir tugas dalam tampilan Terbaru.

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

Arsitektur

Dua konsep Thumbnail Terkini dan Permukaan Tersimpan disatukan dengan Cuplikan Tugas. Saat tugas masuk ke latar belakang, Manajer Jendela menempatkan tangkapan layar dari tugas ini ke GraphicBuffer. Selama penerapan aktivitas teratas dari tugas tersebut tetap berada di memori, GraphicBuffer ini akan disimpan dalam 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 antrean buffer dari jendela awal. Segera setelah aktivitas menggambar bingkai pertamanya, jendela awal Snapshot Tugas akan memudar dengan mulus seperti layar splash biasa.

GraphicBuffer yang sama juga dikirim melalui Binder ke SystemUI untuk digunakan untuk menggambar status pratinjau tugas dalam tampilan Terbaru. Karena ini hanya referensi ke buffer, mengirimkannya melalui binder menghabiskan sedikit resource. Ketika GraphicBuffer tiba di SystemUI, itu dibungkus ke dalam Bitmap perangkat keras dan kemudian ditarik 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 digambar di SystemUI, itu dapat dilakukan tanpa menyalin apa pun. Sebelumnya bitmap harus disalin ke Ashmem, lalu ke memori grafis. Karena metode ini menyimpan snapshot secara langsung di memori grafis, tidak perlu menyalin.
  • 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. Itulah mengapa Recents sekarang dapat menampilkan gambar-gambar ini dengan resolusi penuh. Sebelumnya, itu diturunkan sampelnya 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 Snapshots 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 ini dinonaktifkan, tampilan Terbaru tidak akan menampilkan gambar mini apa pun.

Cuplikan resolusi tinggi dan resolusi rendah

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

Contoh dan sumber

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

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