WindowManager dumps מספקים תמונת מצב של WindowManager בנקודת זמן ספציפית. ב-WindowManager traces מוצגת רצף כרונולוגי של מצבים שמספק תובנות חשובות לגבי הסיבה להצגת חלון במסך, ההגדרה שלו או ההגדרה של הפעילות, המשימה, התצוגה או כל אלמנט אחר בהיררכיה של WindowManager. המידע הזה יכול לעזור לפתור בעיות כמו למה האפליקציה שלי לא מוצגת או המסך הבהב בזמן המעבר בין האפליקציות.
המידע הזה מוצג בכלי WindowManager viewer של Winscope גם עבור עקבות וגם עבור dumps.
מידע נוסף על איסוף נתוני מעקב זמין במאמר בנושא WindowManager.
איור 1. ניתוח של נתוני מעקב של WindowManager.
בצד ימין של המסך מוצגת תצוגת תלת-ממד של החלונות. התצוגה rects מתחשבת בגבולות החלון, בסדר השכבות ובאטימות.
בפלח המרכזי של הכרטיסייה מוצגת היררכיית החלונות. בנוסף לקשרים בין חלונות, פעילויות ומשימות, התצוגה הזו כוללת גם את המידע הבא:
- V: מזהה חלונות גלויים.
בצד ימין של המסך מופיע proto dump של כל המאפיינים הזמינים. מידע נוסף על התכונות של הקטע proto dump זמין במאמר מאפיינים.
@IntDef translation
@IntDef
תרגום היא תכונה מרכזית בחלונית המאפיינים של WindowManager.
@IntDef
מציין שהרכיב עם ההערה מסוג integer מייצג סוג לוגי, והערך שלו חייב להיות אחד מהקבועים שצוינו במפורש.
הקוד @IntDef
משמש בבסיס הקוד של Android במקום סוגי נתונים מנויים (enum) כדי לצמצם את ההשפעה על הזיכרון והביצועים.
דוגמה לשימוש ב- @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;
הדגלים מאוחסנים כמספרים שלמים, במקום להשתמש בערכים שקלים לקריאה, ולכן יכול להיות שיהיה קשה לפרש אותם. Winscope
מתרגם את הדגלים האלה לערכים שקריאים לבני אדם באמצעות הגדרות של @IntDef
.
במהלך קומפילציות, Winscope אוסף מילון של ערכי @IntDef
ומשתמש ברשימה הזו כדי לפענח מופעים של @IntDef
לפורמט שניתן לקריאה על ידי בני אדם בזמן הריצה. לדוגמה, פעילות עם activityType
של 2
מתורגמת ל-activityType
של ACTIVITY_TYPE_HOME
. באופן דומה, חלון עם flags=2173763840
מתורגם ב-Winscope כך:
flags=FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | FLAG_HARDWARE_ACCELERATED |
FLAG_SPLIT_TOUCH | FLAG_SHOW_WALLPAPER | FLAG_LAYOUT_INSET_DECOR |
FLAG_LAYOUT_IN_SCREEN
אם Winscope לא מתרגם נכון מופע של @IntDef
, צריך לפעול לפי השלבים במאמר עדכון המיפוי של @IntDef כדי לעדכן את רשימת המופעים של @IntDef
שמוכרים ל-Winscope.