ضبط یک هیپ دامپ (Views)

پیاده‌سازی Jetpack Compose

این صفحه شامل اطلاعاتی در مورد یافتن و فعال کردن نشت حافظه است که مختص طرح‌بندی‌های مبتنی بر View است. برای اطلاعات اصلی در مورد ضبط و تجزیه و تحلیل داده‌های هیپ، به Capture a heap dump مراجعه کنید.

نشت حافظه را پیدا کنید

برای فیلتر کردن سریع کلاس‌هایی که ممکن است با نشت حافظه مرتبط باشند، منوی کشویی کلاس را باز کنید و نمایش نشت فعالیت/قطعه را انتخاب کنید. اندروید استودیو کلاس‌هایی را نشان می‌دهد که فکر می‌کند نشان‌دهنده نشت حافظه برای نمونه‌های Activity و Fragment در برنامه شما هستند. انواع داده‌هایی که فیلتر نشان می‌دهد شامل موارد زیر است:

  • نمونه‌های Activity که نابود شده‌اند اما هنوز مورد ارجاع قرار می‌گیرند.
  • نمونه‌هایی Fragment که FragmentManager معتبری ندارند اما همچنان مورد ارجاع قرار می‌گیرند.

توجه داشته باشید که فیلتر ممکن است در شرایط زیر نتایج مثبت کاذب ارائه دهد:

  • یک Fragment ایجاد شده است اما هنوز استفاده نشده است.
  • یک Fragment در حال ذخیره شدن است اما نه به عنوان بخشی از یک FragmentTransaction .

برای جستجوی دستی‌تر نشت حافظه، لیست کلاس‌ها و نمونه‌ها را مرور کنید تا اشیاء با اندازه نگهداری بزرگ (Retained Size) را پیدا کنید. نشت حافظه ناشی از هر یک از موارد زیر را جستجو کنید:

  • ارجاعات طولانی مدت به Activity ، Context ، View ، Drawable و سایر اشیاء که ممکن است ارجاعی به Activity یا Context داشته باشند.
  • کلاس‌های داخلی غیراستاتیک، مانند Runnable که می‌توانند یک نمونه Activity در خود نگه دارند.
  • حافظه‌های نهان (کش) که اشیاء را بیش از زمان لازم نگه می‌دارند.

وقتی نشتی حافظه احتمالی را پیدا کردید، از تب‌های Fields و References در Instance Details برای پرش به خط مورد نظر در نمونه یا کد منبع استفاده کنید.

فعال کردن نشت حافظه برای آزمایش

برای تحریک نشت حافظه جهت آزمایش در برنامه خود، می‌توانید نشت‌ها را به یکی از روش‌های زیر فعال کنید:

  • چندین بار دستگاه را در حالت‌های مختلف فعالیت از حالت عمودی به افقی و برعکس بچرخانید. چرخاندن دستگاه اغلب می‌تواند باعث نشت یک شیء Activity ، Context یا View در برنامه شود، زیرا سیستم Activity دوباره ایجاد می‌کند و اگر برنامه شما ارجاعی به یکی از آن اشیاء در جای دیگری داشته باشد، سیستم نمی‌تواند آن را جمع‌آوری زباله کند.
  • بین برنامه خود و برنامه دیگری در حالت‌های مختلف فعالیت جابجا شوید. برای مثال، به صفحه اصلی بروید، سپس به برنامه خود برگردید.