Görev anlık görüntüleri

Görev Anlık Görüntüleri, Android 8.0'da kullanıma sunulan ve Pencere Yöneticisi'ndeki Son Kullanılanlar Küçük Resimleri ile Kayıtlı Yüzeyler için ekran görüntülerini birleştiren bir altyapıdır. Son kullanılanlar görünümündeki Son Kullanılanlar küçük resimleri, bir görevin son durumunu gösterir.

Bir etkinlik durdurulmuş duruma geçtiğinde, görevde en üstte olduğu sürece Pencere Yöneticisi etkinliğin yüzeylerini yok etmiyordu. Bu etkinliğin tekrar gösterilmesi gerektiğinde, bu Kayıtlı Yüzey'i kullanabildiği için Pencere Yöneticisi, etkinliğin ilk çerçevesini çizmesini beklemeden animasyonu başlatabildi.

Mimari

Son küçük resimler ve Kaydedilmiş Yüzeyler kavramları, Görev Anlık Görüntüleri ile birleştirildi. Bir görev arka plana alındığında Pencere Yöneticisi, bu görevin ekran görüntüsünü GraphicBuffer'a yerleştirir. Görevdeki en üst etkinliğin uygulaması bellekte kaldığı sürece bu GraphicBuffer bellekte tutulur. Şimdi aynı etkinlik tekrar ön plana getirildiğinde WindowManager, bir başlangıç penceresi (TaskSnapshotSurface) oluşturacak ve herhangi bir bellek kopyalamadan GraphicBuffer'ı başlangıç penceresinin arabellek sırasına ekleyecek. Etkinlik ilk karesini çizdiği anda, görev anlık görüntüsü başlangıç penceresi normal başlangıç ekranları gibi sorunsuz bir şekilde kaybolur.

Aynı GraphicBuffer, Binder üzerinden SystemUI'ya da gönderilir. Bu arabellek, Son Öğeler görünümünde bir görevin önizleme durumunu çizmek için kullanılır. Bu yalnızca bir arabelleğe referans olduğundan, binder üzerinden gönderilmesi az kaynak harcar. GraphicBuffer, SystemUI'ye ulaştığında donanım Bitmap'ine sarmalanır ve ardından grafik belleğe herhangi bir bellek yüklenmeden ekrana çizilir.

Avantajları

Bu yeni mimarinin üç temel avantajı vardır:

  • Görev anlık görüntüsü başlangıç penceresi olarak kullanılıyorsa anlık görüntü ile gerçek içerik arasında hoş bir geçiş efekti bulunur.
  • Görev anlık görüntüsü SystemUI'de çizildiğinde kopyalama işlemi yapılmaz. Daha önce, bit eşlemin önce Ashmem'e, ardından grafik belleğine kopyalanması gerekiyordu. Bu yöntem, anlık görüntüyü doğrudan grafik belleğinde depoladığından kopyalama gerekmez.
  • Son Kullanılanlar'da gördüğünüz durum, uygulamayı yeniden açtığınızda ilk göreceğiniz durumla her zaman eşleşir. Burada aynı arabelleğe sahip olmak da çok fazla bellek tasarrufu sağlar. Bu nedenle, Son Eklenenler artık bu resimleri tam çözünürlükte gösterebiliyor. Daha önce, bellekten tasarruf etmek için% 64 oranında örnekleme azaltılıyordu.

Uygulama

Bu özellik tamamen Android platformunda yer alır. 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 şu işlevi değiştirin:

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

Bu özellik devre dışı bırakılırsa Son Öğeler görünümünde herhangi bir küçük resim gösterilmez.

Yüksek 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. Diskten bir görev anlık görüntüsü geri yüklenirken önce düşük çözünürlüklü anlık görüntüler okunur, ardından yüksek çözünürlüklü anlık görüntülerle değiştirilir. Bu optimizasyon, resim yükleme sürelerini iyileştirir. Aksi takdirde, anlık görüntü dosyası diskten okunurken küçük bir gecikme yaşanabilir ve kullanıcı, resim kullanılabilir hale gelene kadar boş bir görev kartı görür. Ölçekleri, cihaz yerleşimi yapılandırma dosyasında overlay/frameworks/base/core/res/res/values/config.xml ve config_highResTaskSnapshotScale ayarlarını yaparak yapılandırabilirsiniz. config_lowResTaskSnapshotScale Varsayılan olarak bu değerler sırasıyla 1,0 ve 0,5 olarak ayarlanır. config_lowResTaskSnapshotScale değerini 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ğin kodunun geri kalanını şu konumdaki TaskSnapshot* dosyalarında bulabilirsiniz:

frameworks/base/+/android16-release/services/core/java/com/android/server/wm/