WindowManager 덤프는 특정 시점의 WindowManager 스냅샷을 제공합니다. WindowManager 트레이스는 창이 화면에 표시되는 이유, 구성, 활동, 작업, 디스플레이 또는 WindowManager 계층 구조의 다른 요소에 관한 유용한 정보를 제공하는 상태의 연대순 시퀀스를 갖습니다. 이 정보는 앱이 표시되지 않는 이유 또는 앱 간에 전환하는 동안 깜박임이 발생함과 같은 문제를 해결하는 데 유용합니다.
Winscope의 WindowManager 뷰어는 트레이스와 덤프 모두에 이 정보를 표시합니다.
트레이스 수집에 관한 자세한 내용은 WindowManager를 참고하세요.
그림 1. WindowManager 트레이스 분석
화면 왼쪽에는 창의 3D 뷰가 표시됩니다. 직사각형 뷰는 창 경계, z 순서, 불투명도를 고려합니다.
탭의 중앙 세그먼트에는 창 계층 구조가 표시됩니다. 이 뷰에는 창, 활동, 작업 간의 상위-하위 관계 외에도 다음 정보가 포함됩니다.
- V: 표시된 창을 식별합니다.
화면 오른쪽에는 사용 가능한 모든 속성의 프로토 덤프가 표시됩니다. proto 덤프 섹션의 기능에 관한 자세한 내용은 속성을 참고하세요.
@IntDef 번역
@IntDef
변환은 WindowManager 속성 패널의 핵심 속성입니다.
@IntDef
은 주석이 달린 정수 유형의 요소가 논리적 유형을 나타내며 값이 명시적으로 이름이 지정된 상수 중 하나여야 함을 나타냅니다.
@IntDef
는 메모리 및 성능 영향을 완화하기 위해 enum 대신 Android 코드베이스 내에서 사용됩니다.
다음은 @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;
플래그는 사람이 읽을 수 있는 값을 사용하는 대신 정수로 저장되므로 해석하기 어려울 수 있습니다. Winscope는 @IntDef
정의를 사용하여 이러한 플래그를 사람이 읽을 수 있는 값으로 변환합니다.
컴파일 중에 Winscope는 @IntDef
값의 사전을 수집하고 이 목록을 사용하여 런타임 시 @IntDef
인스턴스를 사람이 읽을 수 있는 형식으로 디코딩합니다. 예를 들어 2
의 activityType
가 있는 활동은 ACTIVITY_TYPE_HOME
의 activityType
로 변환됩니다. 마찬가지로 flags=2173763840
가 있는 창은 Winscope에서 다음과 같이 변환됩니다.
flags=FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | FLAG_HARDWARE_ACCELERATED |
FLAG_SPLIT_TOUCH | FLAG_SHOW_WALLPAPER | FLAG_LAYOUT_INSET_DECOR |
FLAG_LAYOUT_IN_SCREEN
Winscope가 @IntDef
인스턴스를 올바르게 변환하지 않으면 @IntDef 매핑 업데이트의 단계에 따라 Winscope에서 알고 있는 @IntDef
인스턴스 목록을 업데이트합니다.