WindowManager dökümleri, WindowManager'ın belirli bir zamandaki anlık görüntüsünü sağlar. WindowManager izlemeleri, bir pencerenin neden ekranda göründüğü, yapılandırması veya etkinliğinin, görev, ekran ya da WindowManager hiyerarşisindeki diğer öğelerin yapılandırması hakkında değerli bilgiler sağlayan kronolojik bir durum dizisine sahiptir. Bu bilgiler, uygulamam neden görünmüyor? veya Uygulamalar arasında geçiş yaparken titreme sorunu yaşıyorum gibi sorunları gidermek için yararlıdır.
Winscope'un WindowManager görüntüleyicisi, bu bilgileri hem izlemeler hem de dökümler için gösterir.
İz toplama hakkında daha fazla bilgi için WindowManager başlıklı makaleyi inceleyin.
1. şekil. WindowManager iz analizi.
Ekranın sol tarafında pencerelerin 3D görünümü yer alır. Rects görünümü; pencere sınırlarını, Z sırasını ve opaklığı dikkate alır.
Sekmenin orta segmentinde pencere hiyerarşisi gösterilir. Bu görünüm, pencereler, etkinlikler ve görevler arasındaki üst-alt ilişkilerine ek olarak aşağıdaki bilgileri de içerir:
- V: Görünür pencereleri tanımlar.
Ekranın sağ tarafında, mevcut tüm özelliklerin proto dökümü yer alır. Proto dökümü bölümünün özellikleri hakkında daha fazla bilgi için Özellikler konusuna bakın.
@IntDef çevirisi
@IntDef
çeviri, WindowManager özellikleri panelinin temel bir özelliğidir.
@IntDef
, tam sayı türündeki açıklama eklenmiş öğenin mantıksal bir türü temsil ettiğini ve değerinin açıkça adlandırılmış sabitlerden biri olması gerektiğini gösterir.
@IntDef
, bellek ve performans etkisini azaltmak için Android kod tabanında numaralandırmalar yerine kullanılır.
Aşağıda, @IntDef kullanımına dair bir örnek verilmiştir:
/**
* 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;
İşaretler, yorumlanması zor olabilen, insanlar tarafından okunabilir değerler yerine tamsayılar olarak depolanır. Winscope, @IntDef
tanımlarını kullanarak bu işaretleri insanlar tarafından okunabilir değerlere çevirir.
Derlemeler sırasında Winscope, @IntDef
değerlerinin sözlüğünü toplar ve bu listeyi, @IntDef
örneklerini çalışma zamanında okunabilir bir biçime dönüştürmek için kullanır. Örneğin, activityType
değeri 2
olan bir etkinlik, activityType
değeri ACTIVITY_TYPE_HOME
olarak çevrilir. Benzer şekilde, flags=2173763840
içeren bir pencere Winscope'ta şu şekilde çevrilir:
flags=FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | FLAG_HARDWARE_ACCELERATED |
FLAG_SPLIT_TOUCH | FLAG_SHOW_WALLPAPER | FLAG_LAYOUT_INSET_DECOR |
FLAG_LAYOUT_IN_SCREEN
Winscope bir @IntDef
örneğini doğru şekilde çevirmezse Winscope'un bildiği @IntDef
örneklerinin listesini güncellemek için @IntDef eşlemesini güncelleme bölümündeki adımları uygulayın.