উইন্ডো ম্যানেজার

উইন্ডো ম্যানেজার ডাম্প একটি নির্দিষ্ট সময়ে উইন্ডো ম্যানেজারের একটি স্ন্যাপশট প্রদান করে। উইন্ডো ম্যানেজার ট্রেস-এ বিভিন্ন অবস্থার একটি কালানুক্রমিক ধারা থাকে, যা একটি উইন্ডো কেন স্ক্রিনে প্রদর্শিত হচ্ছে, তার কনফিগারেশন, অথবা তার অ্যাক্টিভিটি, টাস্ক, ডিসপ্লে বা উইন্ডো ম্যানেজার হায়ারার্কির অন্য কোনো উপাদানের কনফিগারেশন সম্পর্কে মূল্যবান অন্তর্দৃষ্টি প্রদান করে। এই তথ্যটি 'আমার অ্যাপটি কেন দেখা যাচ্ছে না' বা ' অ্যাপ পরিবর্তন করার সময় আমি ফ্লিকারিং অনুভব করেছি'- এর মতো সমস্যা সমাধানের জন্য সহায়ক।

উইনস্কোপের উইন্ডো ম্যানেজার ভিউয়ার ট্রেস এবং ডাম্প উভয়ের জন্যই এই তথ্য প্রদর্শন করে।

ট্রেস সংগ্রহ সম্পর্কে আরও তথ্যের জন্য উইন্ডো ম্যানেজার দেখুন।

windowmanager

চিত্র ১. উইন্ডোম্যানেজার ট্রেস বিশ্লেষণ।

স্ক্রিনের বাম দিকে উইন্ডোগুলোর একটি ত্রিমাত্রিক দৃশ্য দেখা যায়। রেক্টস ভিউ উইন্ডোর সীমানা, জেড-অর্ডার এবং অস্বচ্ছতা বিবেচনা করে।

ট্যাবটির কেন্দ্রীয় অংশে উইন্ডোর স্তরবিন্যাস দেখানো হয়। উইন্ডো, অ্যাক্টিভিটি এবং টাস্কের মধ্যকার প্যারেন্ট-চাইল্ড সম্পর্ক ছাড়াও, এই ভিউতে নিম্নলিখিত তথ্যগুলোও অন্তর্ভুক্ত থাকে:

  • V: দৃশ্যমান জানালাগুলো শনাক্ত করে।

স্ক্রিনের ডান দিকে সমস্ত উপলব্ধ প্রপার্টির একটি প্রোটো ডাম্প রয়েছে। প্রোটো ডাম্প বিভাগের বৈশিষ্ট্য সম্পর্কে আরও তথ্যের জন্য প্রপার্টিজ দেখুন।

@IntDef অনুবাদ

@IntDef হলো WindowManager প্রোপার্টি প্যানেলের একটি গুরুত্বপূর্ণ প্রোপার্টি। @IntDef নির্দেশ করে যে, ইন্টিজার টাইপের অ্যানোটেড এলিমেন্টটি একটি লজিক্যাল টাইপকে প্রতিনিধিত্ব করে এবং এর মান অবশ্যই সুস্পষ্টভাবে নাম দেওয়া কনস্ট্যান্টগুলোর মধ্যে একটি হতে হবে। মেমরি এবং পারফরম্যান্সের উপর প্রভাব কমানোর জন্য অ্যান্ড্রয়েড কোডবেসে enum-এর পরিবর্তে @IntDef ব্যবহার করা হয়।

নিচে @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;

ফ্ল্যাগগুলো মানুষের পাঠযোগ্য মানের পরিবর্তে পূর্ণসংখ্যা (integers) হিসেবে সংরক্ষিত থাকে, কারণ মানুষের পাঠযোগ্য মান ব্যাখ্যা করা কঠিন হতে পারে। উইনস্কোপ (Winscope) @IntDef ডেফিনিশন ব্যবহার করে এই ফ্ল্যাগগুলোকে মানুষের পাঠযোগ্য মানে অনুবাদ করে। কম্পাইলেশনের সময়, উইনস্কোপ @IntDef মানগুলোর একটি ডিকশনারি সংগ্রহ করে এবং রানটাইমে @IntDef ইনস্ট্যান্সগুলোকে মানুষের পাঠযোগ্য ফরম্যাটে ডিকোড করতে এই তালিকাটি ব্যবহার করে। উদাহরণস্বরূপ, activityType 2 সহ একটি অ্যাক্টিভিটিকে activityType ACTIVITY_TYPE_HOME এ অনুবাদ করা হয়। একইভাবে, flags=2173763840 সহ একটি উইন্ডো উইনস্কোপে এভাবে অনুবাদ করা হয়:

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 ইনস্ট্যান্সকে সঠিকভাবে অনুবাদ না করে, তাহলে Winscope-এর পরিচিত @IntDef ইনস্ট্যান্সের তালিকা আপডেট করতে “Update @IntDef mapping”- এর ধাপগুলো অনুসরণ করুন।