Aufgaben-Snapshots

Aufgaben-Snapshots ist eine mit Android 8.0 eingeführte Infrastruktur, die Screenshots für Miniaturansichten zuletzt verwendeter Elemente und Gespeicherte Oberflächen aus dem Fenstermanager. Letzte Miniaturansichten stellen den letzten Status einer Aufgabe in die Ansicht Recents (Zuletzt verwendet).

Wenn eine Aktivität in den Status „Angehalten“ übergegangen ist, hat der Fenster-Manager das Element Oberflächen der Aktivität, solange diese zu Beginn der Aufgabe stand. Wenn diese Aktivität erneut angezeigt werden musste, konnte der Fenster-Manager ohne zu warten, bis die Aktivität den ersten Frame gezeichnet hat, diese gespeicherte Oberfläche nutzen konnte.

Architektur

Die beiden Konzepte der Miniaturansichten „Zuletzt verwendet“ und „Gespeicherte Oberflächen“ sind in der Schnappschüsse. Wenn eine Aufgabe in den Hintergrund verschoben wird, platziert der Fenstermanager einen Screenshot in einen GraphicBuffer kopieren. Solange die App der oberen Aktivität der Aufgabe im Speicher verbleibt, wird dieser GraphicBuffer im Speicher zu speichern. Wenn nun dieselbe Aktivität wieder in den Vordergrund gerückt wird, Manager erstellt ein Startfenster (TaskSnapshotSurface) und hängt das Element GraphicBuffers erstellt, ohne Arbeitsspeicher in die Pufferwarteschlange des Start- . Sobald der erste Frame der Aktivität gezeichnet wurde, wird das Startfenster wie normale Startbildschirme ausgeblendet.

Derselbe GraphicBuffer wird auch über Binder an SystemUI gesendet und zum Zeichnen verwendet. Vorschaustatus einer Aufgabe in der Ansicht „Letzte“ anzeigen. Da dies nur eine Referenz ist, in einen Zwischenspeicher verschoben und über einen Binder gesendet, wodurch nur wenige Ressourcen erforderlich sind. Wenn der Parameter GraphicBuffer kommt bei der System-UI an, wird in eine Hardware-Bitmap eingebunden und ohne dass Arbeitsspeicher in den Grafikspeicher hochgeladen wird.

Vorteile

Diese neue Architektur hat drei Hauptvorteile:

  • Wenn der Aufgaben-Snapshot als Startfenster verwendet wird, gibt es eine schöne Überblendung. zwischen der Momentaufnahme und dem tatsächlichen Inhalt.
  • Wenn der Aufgaben-Snapshot in SystemUI gezeichnet wurde, Kopieren. Bisher musste die Bitmap nach Ashmem und dann in Grafiken kopiert werden. zu speichern. Da bei dieser Methode der Snapshot direkt im Grafikspeicher gespeichert wird, muss kopiert werden.
  • Der Status, den Sie unter Recents sehen, stimmt immer mit dem Status überein, der zuerst angezeigt wird, wenn Sie die App erneut öffnen. Mit demselben Zwischenspeicher wird auch viel Arbeitsspeicher gespart. Deshalb kann „Recents“ diese Bilder jetzt in voller Auflösung anzeigen. Zuvor wurde die Stichprobenerhebung um 64% reduziert, um Arbeitsspeicher zu sparen.

Implementierung

Diese Funktion ist vollständig auf der Android-Plattform vorhanden. Keine Integration ist erforderlich und eine Anpassung wird nicht unterstützt. Gerätehersteller können jedoch die Funktion für Aufgaben-Snapshots vollständig deaktiviert.

Um diese Funktion zu deaktivieren, ändern Sie diese Funktion:

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

Wenn die Funktion deaktiviert ist, werden in der Ansicht „Letzte“ keine was auch immer los ist.

Snapshots mit hoher und niedriger Auflösung

Aufgaben-Snapshots werden in zwei Größen auf das Laufwerk geschrieben. Beim Wiederherstellen einer Aufgabe vom Laufwerk erstellt, werden Snapshots mit geringer Auflösung zuerst gelesen und dann durch hochauflösenden Anzeigen. Durch diese Optimierung werden die Ladezeiten der Bilder verkürzt. Andernfalls kann es beim Lesen der Snapshot-Datei aus dem und der Nutzer sieht eine leere Taskkarte, bis das Bild verfügbar war. Du kannst die Skalierungen in der Konfigurationsdatei für das Geräte-Overlay konfigurieren overlay/frameworks/base/core/res/res/values/config.xml nach Einstellung config_highResTaskSnapshotScale und config_lowResTaskSnapshotScale Standardmäßig sind diese auf 1, 0 gesetzt. bzw.0,5. Deaktivieren Sie Snapshots mit geringer Auflösung durch folgende Einstellung: config_lowResTaskSnapshotScale auf 0,0.

Beispiele und Quelle

Den Rest des Codes für diese Funktion finden Sie in den TaskSnapshot*-Dateien unter:

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