WindowManager

Dump WindowManager memberikan snapshot WindowManager pada waktu tertentu. Aktivitas pelacakan WindowManager menampilkan urutan kronologis status yang memberikan insight berharga tentang alasan jendela muncul di layar, konfigurasinya, atau konfigurasi 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 rekaman aktivitas 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 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 mencakup informasi berikut:

  • V: Mengidentifikasi jendela yang terlihat.

Sisi kanan layar menampilkan proto dump 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 beranotasi dari jenis bilangan bulat mewakili jenis logis dan nilainya harus berupa 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;

Flag disimpan sebagai bilangan bulat, bukan menggunakan nilai yang mudah dibaca, yang dapat sulit ditafsirkan. Winscope menerjemahkan tanda ini menjadi nilai yang mudah dibaca 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 Memperbarui pemetaan @IntDef untuk memperbarui daftar instance @IntDef yang diketahui oleh Winscope.