WindowManager के डंप, किसी खास समय पर WindowManager का स्नैपशॉट देते हैं. WindowManager ट्रैस में, क्रम से होने वाले स्टेटस की जानकारी होती है. इससे यह अहम जानकारी मिलती है कि स्क्रीन पर विंडो क्यों दिखती है, उसका कॉन्फ़िगरेशन क्या है या WindowManager हैरारकी में उसकी गतिविधि, टास्क, डिसप्ले या किसी अन्य एलिमेंट का क्या स्टेटस है. इस जानकारी से, मेरा ऐप्लिकेशन क्यों नहीं दिख रहा है या एक से दूसरे ऐप्लिकेशन पर स्विच करते समय मुझे फ़्लिकर (रोशनी कम-ज़्यादा होना) की समस्या क्यों आ रही है जैसी समस्याओं को हल करने में मदद मिलती है.
Winscope का WindowManager व्यूअर, ट्रेस और डंप, दोनों के लिए यह जानकारी दिखाता है.
ट्रैक इकट्ठा करने के बारे में ज़्यादा जानकारी के लिए, WindowManager देखें.
पहली इमेज. WindowManager ट्रैक का विश्लेषण.
स्क्रीन की बाईं ओर, खिड़कियों का 3D व्यू दिखता है. रेक्ट्स व्यू में, विंडो के बाउंड, z-क्रम, और अपारदर्शिता को ध्यान में रखा जाता है.
टैब के सेंटर सेगमेंट में, विंडो की हैरारकी दिखती है. इस व्यू में, विंडो, गतिविधियों, और टास्क के बीच पैरंट-चाइल्ड रिलेशनशिप के अलावा, यह जानकारी भी शामिल होती है:
- V: दिख रही विंडो की पहचान करता है.
स्क्रीन की दाईं ओर, सभी उपलब्ध प्रॉपर्टी का प्रोटो डंप दिखता है. प्रोटो डंप सेक्शन की सुविधाओं के बारे में ज़्यादा जानकारी के लिए, प्रॉपर्टी देखें.
@IntDef translation
@IntDef
translation, WindowManager प्रॉपर्टी पैनल की मुख्य प्रॉपर्टी है.
@IntDef
से पता चलता है कि एनोटेट किए गए इंटिजर टाइप के एलिमेंट से लॉजिकल टाइप का पता चलता है. साथ ही, इसकी वैल्यू, साफ़ तौर पर नाम वाली कॉन्स्टेंट में से किसी एक की होनी चाहिए.
@IntDef
का इस्तेमाल, 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
इंस्टेंस की सूची अपडेट करें.