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