Google 致力于为黑人社区推动种族平等。查看具体举措
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Snapshot delle attività

Task Snapshots è un'infrastruttura introdotta in Android 8.0 che combina screenshot per miniature Recenti e Superfici salvate da Window Manager. Recenti Le miniature rappresentano l'ultimo stato di un'attività nella vista Recenti.

Quando un'attività entrava in uno stato di interruzione, Window Manager non distruggeva le superfici dell'attività fintanto che quell'attività si trovava in cima all'attività. Se questa attività doveva essere mostrata di nuovo, Window Manager era in grado di avviare l'animazione senza attendere che l'attività finisse di disegnare il suo primo fotogramma, poiché era in grado di utilizzare questa superficie salvata.

Architettura

I due concetti di Miniature recenti e Superfici salvate sono unificati con gli snapshot delle attività. Quando un'attività passa in background, Window Manager inserisce uno screenshot di questa attività in un GraphicBuffer. Finché l'applicazione dell'attività principale dell'attività rimane in memoria, questo GraphicBuffer verrà conservato in memoria. Ora, quando la stessa attività viene portata di nuovo in primo piano, Window Manager creerà una finestra iniziale (TaskSnapshotSurface) e collegherà il GraphicBuffer senza copiare alcuna memoria nella coda del buffer della finestra iniziale. Non appena l'attività ha tracciato il suo primo fotogramma, la finestra di avvio dell'Istantanea attività si dissolverà in modo uniforme come le normali schermate iniziali.

Lo stesso GraphicBuffer viene anche inviato tramite Raccoglitore a SystemUI per essere utilizzato per disegnare lo stato di anteprima di un'attività nella vista Recenti. Poiché questo è solo un riferimento a un buffer, inviarlo tramite un raccoglitore richiede poche risorse. Quando il GraphicBuffer arriva a SystemUI, viene avvolto in una Bitmap hardware e quindi disegnato sullo schermo senza che la memoria venga caricata nella memoria grafica.

Benefici

Ci sono tre principali vantaggi di questa nuova architettura:

  • Se l'istantanea dell'attività viene utilizzata come finestra iniziale, c'è una bella dissolvenza incrociata tra l'istantanea e il contenuto reale.
  • Quando l'istantanea dell'attività viene disegnata in SystemUI, può essere eseguita senza alcuna copia. In precedenza la bitmap doveva essere copiata in Ashmem, quindi nella memoria grafica. Poiché questo metodo archivia l'istantanea direttamente nella memoria grafica, non è necessaria alcuna copia.
  • Lo stato che vedi in Recenti corrisponde sempre allo stato che vedrai per la prima volta quando riapri l'app. Avere lo stesso buffer qui consente anche di risparmiare molta memoria. Ecco perché Recents è ora in grado di mostrare queste immagini a piena risoluzione. In precedenza, veniva sottocampionato del 64% per risparmiare memoria.

Implementazione

Questa funzionalità esiste interamente nella piattaforma Android. Non è richiesta alcuna integrazione e la personalizzazione non è supportata. I produttori di dispositivi possono, tuttavia, disabilitare completamente la funzione Snapshot delle attività.

Per disabilitare questa funzione, modificare questa funzione:

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

Nota che se la funzione è disabilitata, la vista Recenti non mostrerà alcuna miniatura.

Istantanee ad alta e bassa risoluzione

Gli snapshot delle attività vengono scritti sul disco a due scale. Quando si ripristina un'istantanea di un'attività dal disco, le istantanee a bassa risoluzione vengono prima lette e poi sostituite dalla loro controparte ad alta risoluzione. Questa ottimizzazione migliora i tempi di caricamento delle immagini. In caso contrario, potrebbe esserci un leggero ritardo durante la lettura del file snapshot dal disco e l'utente vedrebbe una scheda attività vuota fino a quando l'immagine non fosse disponibile. È possibile configurare le scale nel file di configurazione overlay del dispositivo overlay overlay/frameworks/base/core/res/res/values/config.xml impostando config_highResTaskSnapshotScale e config_lowResTaskSnapshotScale . Per impostazione predefinita, questi sono impostati rispettivamente su 1.0 e 0.5. Disabilita gli snapshot a bassa risoluzione impostando config_lowResTaskSnapshotScale su 0.0.

Esempi e fonte

Trova il resto del codice per questa funzione all'interno dei file TaskSnapshot * in:

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