I dump di WindowManager forniscono un'istantanea di WindowManager in un momento specifico. Le tracce di WindowManager includono una sequenza cronologica di stati che forniscono informazioni preziose sul motivo per cui una finestra viene visualizzata sullo schermo, sulla sua configurazione o su quella della sua attività, della sua attività, della sua visualizzazione o di qualsiasi altro elemento nella gerarchia di WindowManager. Queste informazioni sono utili per risolvere problemi come Perché la mia app non è visibile o Ho riscontrato sfarfallio durante il passaggio da un'app all'altra.
Il visualizzatore WindowManager di Winscope mostra queste informazioni sia per le tracce che per i dump.
Per ulteriori informazioni sulla raccolta delle tracce, consulta WindowManager.
Figura 1. Analisi delle tracce di WindowManager.
Sul lato sinistro dello schermo è presente una visualizzazione 3D delle finestre. La visualizzazione dei rettangoli considera i limiti della finestra, l'ordine z e l'opacità.
Il segmento centrale della scheda mostra la gerarchia delle finestre. Oltre ai rapporti tra elementi principali e secondari tra finestre, attività e attività, questa visualizzazione include anche le seguenti informazioni:
- V: identifica le finestre visibili.
Sul lato destro dello schermo è presente un dump di proto di tutte le proprietà disponibili. Per ulteriori informazioni sulle funzionalità della sezione del dump di proto, consulta Proprietà.
Traduzione di @IntDef
La traduzione @IntDef
è una proprietà chiave del riquadro delle proprietà WindowManager.
@IntDef
indica che l'elemento annotato di tipo intero rappresenta un
tipo logico e che il suo valore deve essere una delle costanti denominate esplicitamente.
@IntDef
viene utilizzato all'interno della base di codice di Android anziché degli enum per ridurre l'impatto su memoria e prestazioni.
Di seguito è riportato un esempio di utilizzo di @IntDef:
/**
* The modes to control how root task is moved to the front when calling {@link Task#reparent}.
*/
@Retention(RetentionPolicy.SOURCE)
@IntDef({
REPARENT_MOVE_ROOT_TASK_TO_FRONT,
REPARENT_KEEP_ROOT_TASK_AT_FRONT,
REPARENT_LEAVE_ROOT_TASK_IN_PLACE
})
@interface ReparentMoveRootTaskMode {}
// Moves the root task to the front if it was not at the front
static final int REPARENT_MOVE_ROOT_TASK_TO_FRONT = 0;
// Only moves the root task to the front if it was focused or frontmost already
static final int REPARENT_KEEP_ROOT_TASK_AT_FRONT = 1;
// Do not move the root task as a part of reparenting
static final int REPARENT_LEAVE_ROOT_TASK_IN_PLACE = 2;
I flag vengono memorizzati come numeri interi, anziché utilizzare valori leggibili da persone, che possono essere difficili da interpretare. Winscope
traduce questi flag in valori leggibili utilizzando le definizioni @IntDef
.
Durante le compilazioni, Winscope raccoglie un dizionario di valori @IntDef
e utilizza questo elenco per decodificare le istanze @IntDef
in un formato leggibile al momento dell'esecuzione. Ad esempio, un'attività con activityType
di 2
viene tradotta in
activityType
di ACTIVITY_TYPE_HOME
. Analogamente, una finestra conflags=2173763840
viene tradotta in Winscope come:
flags=FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | FLAG_HARDWARE_ACCELERATED |
FLAG_SPLIT_TOUCH | FLAG_SHOW_WALLPAPER | FLAG_LAYOUT_INSET_DECOR |
FLAG_LAYOUT_IN_SCREEN
Se Winscope non traduce correttamente un'istanza @IntDef
,
segui i passaggi descritti in Aggiornare la mappatura @IntDef
per aggiornare l'elenco delle istanze @IntDef
conosciute da Winscope.