Les vidages WindowManager fournissent un instantané de WindowManager à un moment donné. Les traces WindowManager comportent une séquence chronologique d'états qui fournissent des informations précieuses sur la raison pour laquelle une fenêtre s'affiche à l'écran, sa configuration, ou celle de son activité, de sa tâche, de son écran ou de tout autre élément de la hiérarchie WindowManager. Ces informations sont utiles pour résoudre des problèmes tels que Pourquoi mon application n'est-elle pas visible ? ou Mon écran a clignoté lorsque j'ai changé d'application.
Le lecteur WindowManager de Winscope affiche ces informations à la fois pour les traces et les vidages.
Pour en savoir plus sur la collecte de traces, consultez WindowManager.
Figure 1 : Analyse de la trace WindowManager.
Sur le côté gauche de l'écran, une vue 3D des fenêtres s'affiche. La vue rects tient compte des limites de la fenêtre, de l'ordre Z et de l'opacité.
Le segment central de l'onglet affiche la hiérarchie des fenêtres. En plus des relations parent-enfant entre les fenêtres, les activités et les tâches, cette vue inclut également les informations suivantes:
- V:identifie les fenêtres visibles.
Sur le côté droit de l'écran, vous trouverez un dump de proto de toutes les propriétés disponibles. Pour en savoir plus sur les fonctionnalités de la section de vidage de proto, consultez la section Propriétés.
@IntDef translation
La traduction @IntDef
est une propriété clé du panneau des propriétés de WindowManager.
@IntDef
indique que l'élément annoté de type entier représente un type logique et que sa valeur doit être l'une des constantes nommées explicitement.
@IntDef
est utilisé dans le code source Android à la place des énumérations pour atténuer l'impact sur la mémoire et les performances.
Voici un exemple d'utilisation de @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;
Les indicateurs sont stockés sous forme d'entiers, au lieu d'utiliser des valeurs lisibles par l'homme, ce qui peut être difficile à interpréter. Winscope traduit ces indicateurs en valeurs lisibles à l'aide de définitions @IntDef
.
Lors des compilations, Winscope collecte un dictionnaire de valeurs @IntDef
et utilise cette liste pour décoder les instances @IntDef
dans un format lisible par l'homme au moment de l'exécution. Par exemple, une activité avec activityType
de 2
est traduite en activityType
de ACTIVITY_TYPE_HOME
. De même, une fenêtre avec flags=2173763840
est traduite dans Winscope comme suit:
flags=FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | FLAG_HARDWARE_ACCELERATED |
FLAG_SPLIT_TOUCH | FLAG_SHOW_WALLPAPER | FLAG_LAYOUT_INSET_DECOR |
FLAG_LAYOUT_IN_SCREEN
Si Winscope ne traduit pas correctement une instance @IntDef
, suivez la procédure décrite dans la section Mettre à jour la mise en correspondance @IntDef pour mettre à jour la liste des instances @IntDef
connues par Winscope.