این صفحه شامل اطلاعاتی در مورد یافتن و فعال کردن نشت حافظه است که مختص طرحبندیهای مبتنی بر 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دوباره ایجاد میکند و اگر برنامه شما ارجاعی به یکی از آن اشیاء در جای دیگری داشته باشد، سیستم نمیتواند آن را جمعآوری زباله کند. - بین برنامه خود و برنامه دیگری در حالتهای مختلف فعالیت جابجا شوید. برای مثال، به صفحه اصلی بروید، سپس به برنامه خود برگردید.