WindowManager

Dump WindowManager memberikan snapshot WindowManager pada waktu tertentu. Rekaman aktivitas WindowManager menampilkan urutan status kronologis yang memberikan insight berharga tentang alasan jendela muncul di layar, konfigurasinya, atau aktivitasnya, tugas, tampilan, atau elemen lainnya 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 pelacakan dan dump.

Lihat WindowManager untuk mengetahui informasi selengkapnya tentang pengumpulan rekaman aktivitas.

windowmanager

Gambar 1. Analisis rekaman aktivitas WindowManager.

Sisi kiri layar menampilkan tampilan 3D jendela. Tampilan persegi 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 menyertakan informasi berikut:

  • V: Mengidentifikasi jendela yang terlihat.

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

Terjemahan @IntDef

Terjemahan @IntDef adalah properti utama panel properti WindowManager. @IntDef menunjukkan bahwa elemen berjenis bilangan bulat yang dianotasi mewakili jenis logika dan nilainya harus berupa salah satu konstanta yang dinamai 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;

Flag disimpan sebagai bilangan bulat, bukan menggunakan nilai yang dapat dibaca manusia, yang dapat sulit ditafsirkan. Winscope menerjemahkan flag ini menjadi nilai yang dapat dibaca manusia menggunakan definisi @IntDef. Selama kompilasi, Winscope mengumpulkan kamus nilai @IntDef dan menggunakan daftar ini untuk mendekode instance @IntDef menjadi format yang dapat dibaca manusia saat runtime. Misalnya, aktivitas dengan activityType dari 2 diterjemahkan menjadi activityType dari 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.