Görev Anlık Görüntüleri

Görev Anlık Görüntüleri, Android 8.0'da sunulan , Son Kullanılan Küçük Resimler ve Pencere Yöneticisi'ndeki Kaydedilen Yüzeyler için ekran görüntülerini birleştiren bir altyapıdır. Son Kullanılanlar Küçük resimleri, Son Kullanılanlar görünümündeki bir görevin son durumunu temsil eder.

Bir etkinlik durdurulmuş duruma geçtiğinde, Pencere Yöneticisi, etkinlik görevin üstünde olduğu sürece etkinliğin yüzeylerini yok etmedi. Bu aktivitenin tekrar gösterilmesi gerekiyorsa, Pencere Yöneticisi bu Kayıtlı Yüzeyi kullanabildiği için aktivitenin ilk karesini çizmesini beklemeden animasyonu başlatabildi.

Mimari

Son Kullanılan Küçük Resimler ve Kaydedilen Yüzeyler kavramları, Görev Anlık Görüntüleri ile birleştirilmiştir. Bir görev arka plana geçtiğinde, Pencere Yöneticisi bu görevin ekran görüntüsünü GraphicBuffer'a yerleştirir. Görevin en üstteki etkinliğinin uygulaması bellekte kaldığı sürece bu GraphicBuffer bellekte tutulacaktır. Artık aynı aktivite tekrar ön plana getirildiğinde, Pencere Yöneticisi bir başlangıç ​​penceresi (TaskSnapshotSurface) oluşturacak ve GraphicBuffer'ı herhangi bir bellek kopyalamadan başlangıç ​​penceresinin arabellek kuyruğuna ekleyecektir. Etkinlik ilk karesini çizer çizmez, Görev Anlık Görüntüsü başlangıç ​​penceresi normal açılış ekranları gibi sorunsuz bir şekilde kaybolacaktır.

Aynı GraphicBuffer ayrıca Son Kullanılanlar görünümünde bir görevin önizleme durumunu çizmek için kullanılmak üzere Binder üzerinden SystemUI'ye gönderilir. Bu yalnızca ara belleğe bir referans olduğundan, onu ciltleyici üzerinden göndermek çok az kaynak tüketir. GraphicBuffer, SystemUI'ye ulaştığında, bir donanım Bitmap'ine sarılır ve ardından grafik belleğine herhangi bir bellek yüklemesi olmadan ekrana çizilir.

Faydalar

Bu yeni mimarinin üç ana faydası var:

  • Görevin anlık görüntüsü bir başlangıç ​​penceresi olarak kullanılıyorsa, anlık görüntü ile gerçek içerik arasında güzel bir çapraz geçiş olur.
  • SystemUI'da görev anlık görüntüsü çizildiğinde, herhangi bir kopyalamaya gerek kalmadan bu işlem yapılabilir. Önceden bitmap'in Ashmem'e, ardından grafik belleğine kopyalanması gerekiyordu. Bu yöntem anlık görüntüyü doğrudan grafik belleğinde sakladığından kopyalamaya gerek yoktur.
  • Son Kullanılanlar'da gördüğünüz durum her zaman uygulamayı yeniden açtığınızda ilk göreceğiniz durumla eşleşir. Burada aynı arabelleğe sahip olmak aynı zamanda çok fazla bellek tasarrufu sağlar. Bu nedenle, Son Aramalar artık bu görüntüleri tam çözünürlükte gösterebiliyor. Daha önce, bellekten tasarruf etmek için %64 oranında azaltılmış örnekleniyordu.

Uygulama

Bu özellik tamamen Android platformunda mevcuttur. Entegrasyon gerekmez ve özelleştirme desteklenmez. Ancak cihaz üreticileri Görev Anlık Görüntüleri özelliğini tamamen devre dışı bırakabilir.

Bu özelliği devre dışı bırakmak için bu işlevi değiştirin:

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

Özellik devre dışı bırakılırsa Son Kullanılanlar görünümünün hiçbir şekilde küçük resim göstermeyeceğini unutmayın.

Yüksek çözünürlüklü ve düşük çözünürlüklü anlık görüntüler

Görev anlık görüntüleri diske iki ölçekte yazılır. Bir görev anlık görüntüsünü diskten geri yüklerken, önce düşük çözünürlüklü anlık görüntüler okunur ve ardından yüksek çözünürlüklü karşılıklarıyla değiştirilir. Bu optimizasyon, görsel yükleme sürelerini iyileştirir. Aksi takdirde, anlık görüntü dosyasının diskten okunması sırasında hafif bir gecikme yaşanabilir ve görüntü mevcut olana kadar kullanıcı boş bir görev kartı görebilir. Cihaz yer paylaşımı yapılandırma dosyası overlay/frameworks/base/core/res/res/values/config.xml içindeki ölçekleri, config_highResTaskSnapshotScale ve config_lowResTaskSnapshotScale ayarını yaparak yapılandırabilirsiniz. Varsayılan olarak bunlar sırasıyla 1,0 ve 0,5'e ayarlanmıştır. config_lowResTaskSnapshotScale 0,0 olarak ayarlayarak düşük çözünürlüklü anlık görüntüleri devre dışı bırakın.

Örnekler ve kaynak

Bu özelliğe ilişkin kodun geri kalanını TaskSnapshot* dosyalarında bulabilirsiniz:

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