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.
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.