Pencere Yöneticisi

WindowManager dump'leri, WindowManager'ın belirli bir zamandaki anlık görüntüsünü sağlar. WindowManager izlemeleri, bir pencerenin ekranda neden göründüğüne, yapılandırmasına veya etkinliğinin, görevinin, ekranının ya da WindowManager hiyerarşisindeki diğer öğelerin yapılandırmasına dair değerli bilgiler sağlayan, zamana göre sıralanmış bir durum dizisi içerir. Bu bilgiler, Uygulamam neden görünmüyor? veya Uygulamalar arasında geçiş yaparken titreme sorunuyla karşılaşı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.

İzleme toplama hakkında daha fazla bilgi için WindowManager bölümüne bakın.

windowmanager

Şekil 1. WindowManager izleme analizi.

Ekranın sol tarafında, pencerelerin 3D görünümü gösterilir. rects görünümü, pencere sınırlarını, z sırasını ve opaklığı dikkate alır.

Sekmenin orta segmenti, pencere hiyerarşisini gösterir. Bu görünüm, pencereler, etkinlikler ve görevler arasındaki üst öğe-alt öğe 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 mülkleri içeren bir proto dökümü bulunur. Proto dökümü bölümünün özellikleri hakkında daha fazla bilgi için Özellikler bölümüne bakın.

@IntDef translation

@IntDef translation, WindowManager özellikleri panelinin temel bir özelliğidir. @IntDef, tam sayı türündeki ek açıklamalı öğenin mantıksal bir türü temsil ettiğini ve değerinin açıkça adlandırılmış sabitlerden biri olması gerektiğini belirtir. @IntDef, Android kod tabanında bellek ve performans üzerindeki etkiyi azaltmak için enum yerine kullanılır.

Aşağıda, @IntDef kullanımıyla ilgili 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 olabilecek kullanıcı tarafından okunabilir değerler yerine tamsayı olarak depolanır. Winscope, bu işaretleri @IntDef tanımlarını kullanarak insanlar tarafından okunabilir değerlere dönüştürür. Winscope, derleme sırasında @IntDef değerlerinin sözlüğünü toplar ve @IntDef örneklerini çalışma zamanında okunabilir bir biçimde kodlamak için bu listeyi kullanır. Örneğin, 2 activityType değerine sahip bir etkinlik, ACTIVITY_TYPE_HOME activityType değerine ç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 çevirmiyorsa Winscope tarafından bilinen @IntDef örnekleri listesini güncellemek için @IntDef eşlemesini güncelleme bölümündeki adımları uygulayın.