WindowManager

Dumps WindowManager memberikan snapshot WindowManager pada waktu tertentu. Trace WindowManager menampilkan urutan kronologis status yang memberikan insight berharga tentang alasan jendela muncul di layar, konfigurasinya, atau aktivitas, tugas, tampilan, atau elemen lain dalam hierarki WindowManager. Informasi ini berguna untuk memecahkan masalah seperti mengapa aplikasi saya tidak terlihat atau Saya mengalami kedipan saat beralih antar-aplikasi.

Penampil WindowManager Winscope menampilkan informasi ini untuk trace dan dump.

Lihat WindowManager untuk mengetahui informasi selengkapnya tentang pengumpulan trace.

windowmanager

Gambar 1. Analisis trace WindowManager.

Sisi kiri layar menampilkan tampilan 3D jendela. Tampilan rects mempertimbangkan batas jendela, urutan Z, dan opasitas.

Segmen tengah tab menampilkan hierarki jendela. Selain hubungan induk-turunan antara jendela, aktivitas, dan tugas, tampilan ini juga berisi informasi berikut:

  • V: Mengidentifikasi jendela yang terlihat.

Sisi kanan layar menampilkan proto dump semua properti yang tersedia. Untuk mengetahui informasi selengkapnya tentang fitur bagian proto dump lihat Properti.

Terjemahan @IntDef

Terjemahan @IntDef adalah properti utama panel properti WindowManager. @IntDef menunjukkan bahwa elemen beranotasi dari jenis bilangan bulat mewakili jenis logis dan nilainya harus salah satu konstanta yang diberi nama secara eksplisit. @IntDef digunakan dalam codebase Android, bukan enum untuk mengurangi dampak memori dan performa.

Berikut adalah contoh penggunaan @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;

Tanda disimpan sebagai bilangan bulat, bukan menggunakan nilai yang dapat dibaca manusia, yang dapat sulit diinterpretasikan. Winscope menerjemahkan tanda ini ke dalam nilai yang dapat dibaca manusia menggunakan definisi @IntDef. Selama kompilasi, Winscope mengumpulkan kamus nilai @IntDef dan menggunakan daftar ini untuk mendekode instance @IntDef ke dalam format yang dapat dibaca manusia saat runtime. Misalnya, aktivitas dengan activityType 2 diterjemahkan menjadi activityType ACTIVITY_TYPE_HOME. Demikian pula, jendela dengan flags=2173763840 diterjemahkan di Winscope sebagai:

flags=FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | FLAG_HARDWARE_ACCELERATED | FLAG_SPLIT_TOUCH | FLAG_SHOW_WALLPAPER | FLAG_LAYOUT_INSET_DECOR | FLAG_LAYOUT_IN_SCREEN

Jika Winscope tidak menerjemahkan instance @IntDef dengan benar, ikuti langkah-langkah di bagian Memperbarui pemetaan @IntDef untuk memperbarui daftar instance @IntDef yang diketahui oleh Winscope.