جستجو برای:
سبد خرید 0
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
ورود
گذرواژه خود را فراموش کرده اید؟
عضویت

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

ارسال مجدد کد یکبار مصرف (00:60)
  • 02171058559
  • info@amooznegar.com
  • لیست علاقه مندی ها
آکادمی آموزنگار
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

آکادمی آموزنگار > اخبار > برنامه نویسی > اندروید > چگونه memory Leak را در برنامه اندروید خود برطرف کنیم؟

چگونه memory Leak را در برنامه اندروید خود برطرف کنیم؟

1400-05-16
ارسال شده توسط آموزنگار
اندروید
memory Leak در اندروید

یکی از نکات جالب در مورد جاوا جمع آوری زباله (GC) است. جمع کننده زباله به صورت دوره ای برای بررسی object هایی که استفاده نمی شوند اجرا می شود و آنها را از بین می برد.

یک حافظه چه زمانی Memory Leak می کند؟

نشت حافظه زمانی رخ می دهد که object وجود داشته باشد اما برنامه از آنها استفاده نمی کند و جمع کننده زباله قادر به تشخیص آن نیست . از این رو ، آنها در حافظه بدون استفاده باقی می مانند و میزان حافظه موجود برای برنامه را کاهش می دهند ، که در این صورت نتایج غیر منتظره ای رخ خواهد داد.

چگونه Memory Leak حافظه را تشخیص دهیم؟

روش های مختلفی برای انجام این کار وجود دارد. ما قصد داریم در این مقاله به برخی از آنها بپردازیم.

در ابتدا کدی می نویسیم که باعث ایجاد نشت حافظه شود. ما یک برنامه با دو Activity  ایجاد خواهیم کرد. Activity A دارای یک button است که Activity B را باز می کند. علاوه بر این ، ما همچنین یک کلاس singleton به نام  Managerایجاد می کنیم که دارای یک static  refrenceاز یک Context باشد.

class Manager {
   private static Manager ourInstance;
   private Context context;
   static Manager getInstance(Context context) {
       if (ourInstance == null) {
           ourInstance = new Manager(context);
       }
       return ourInstance;
   }
   private Manager(Context context) {
       this.context = context;
   }
}

سپس این کلاس singleton را ازActivity A صدا میزنیم.

Manager.getInstance(this);

تشخیص Memory Leak حافظه با استفاده از مانیتورهای Android Studio

تشخیص Memory Leak

اندروید استودیو ابزارهای مفیدی برای نمایه سازی عملکرد برنامه شما فراهم می کند و یکی از آنها Memory Monitor است. ما می توانیم ازMemory Monitor برای شناسایی نشت حافظه از طریق مراحل زیر استفاده کنیم:

  1. برنامه خود را روی موبایل یا شبیه ساز خود اجرا کنید.
  2. Android Monitor را باز کنید (Cmd + 6 را در Mac یا Alt + 6 را در ویندوز فشار دهید). در بالای Memory Monitor ، روی Start Allocation Tracking کلیک کنید.
  3. از برنامه در اطراف بخشی که احتمال می دهید نشت حافظه داشته باشد استفاده کنید. در مثال خود ، به سراغ فعالیت دیگری خواهیم رفت.
  4. بر روی Initiate GC کلیک کنید تا جمع کننده زباله مجبور شود شروع به جمع آوری objectهایی کند که در حال حاضر استفاده نمی شوند و آنها را خارج کنید. باید کمی نمودار حافظه کاهش یابد.
  5. بر روی Dump Java Heap کلیک کنید تا Android Studio یک پرونده .hprof که شامل یک heap snapshot است را ایجاد کند. ساده ترین راه برای بررسی نشت حافظه استفاده از Analyzer Tasks است
  6. تب Analyzer Tasks را باز کرده و سپس بر روی Run در بالای این تب کلیک کنید. شما باید Activityهای نشت کرده را در تب نتایج تجزیه و تحلیل در زیر تب Analyzer Tasks مشاهده کنید.
مانیتور نشت حافظه اندروید استودیو

تشخیص Memory Leak حافظه با استفاده از Leak Canary

Leak Canary کتابخانه ای است که توسط Square ساخته شده است و راهی بسیار سریع برای تشخیص نشت حافظه است. Leak Canary به شما امکان می دهد نشت حافظه را در مدت زمان طولانی تری تشخیص دهید ، زیرا نیازی نیست دستگاه خود را به Android Studio متصل کرده و برنامه خود را برای مدت طولانی کنترل کنید. هر زمان که نشت حافظه وجود داشته باشد ، Leak Canary اعلان هایی برای شما ارسال می کند.

کاتلین در برابر جاوا: چرا باید کاتلین را به جای جاوا انتخاب کنید؟
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

اضافه کردن Leak Canary واقعاً آسان است. تمام کاری که شما باید انجام دهید این است که موارد زیر را به فایل build.gradle سطح برنامه خود اضافه کنید:

dependencies;{
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'
}

سپس کد زیر را به کلاس Application خود اضافه کنید:

@Override public void onCreate() {
   super.onCreate();
   if (LeakCanary.isInAnalyzerProcess(this)) {
     // This process is dedicated to LeakCanary for heap analysis.
     // You should not init your app in this process.
     return;
   }
   LeakCanary.install(this);
   // Normal app init code…
 }

تشخیص Memory Leak های احتمالی با infer

Infer یک ابزار تجزیه و تحلیل static است که توسط facebook ساخته شده است و به شما کمک می کند تا استثناهای null pointer و نشت منابع و همچنین قابلیت دسترسی به annotation ، قفل محافظ از دست رفته و شرایط  گردش همزمانی را پیدا کنید. این ابزار خوبی برای افزودن به CI شما است تا از همه اشکالات احتمالی عبور کنید. این ابزارهمچنین open source است ، بنابراین توسعه این ابزار هنوز در حال تکامل است.

قبلی استفاده از Retrofit در ViewModel اندروید
بعدی آموزش OpenStreetMap و مقایسه با نقشه گوگل مپ

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • GoLang
  • jetpack compose
  • PHP
  • اپلیکیشن
  • امنیت
  • اندروید
  • اوپن سورس
  • برنامه نویسی
  • برنامه نویسی iOS
  • برنامه نویسی react native
  • پادکست صوتی
  • تکنولوژی
  • جاوا
  • طراح رابط کاربری
  • طراحی رابط کاربری
  • طراحی وب
  • عمومی
  • فریلنسر
  • فلاتر
  • فناوری
  • کاتلین
  • کتاب های آموزشی
  • کسب و کار
  • هوش مصنوعی
  • وردپرس
برچسب‌ها
admob coroutine dagger dagger-hilt jetpack nft rxandroid rxjava spring swift ارز دیجیتال امنیت در اندروید دارت فایربیس فوشیا مصاحبه کاری معماری mvi نقشه راه برنامه نویسی کاتلین گوگل

آکادمی آموزنگار، جایی برای آغاز یک سفر شگفت‌انگیز در دنیای برنامه‌نویسی است. آموزنگار تلاش می‌کند تا هر فردی را از هر سطحی از زندگی و تجربه به دنیای جذاب برنامه‌نویسی وارد کند.

دسترسی سریع
  • درباره ما
  • تماس با ما
  • حریم خصوصی
  • سوالات متداول
نمادها
شبکه های اجتماعی
Facebook Twitter Youtube icon--white Whatsapp

تهران، ازگل ، مجتمع تجاری الماس ایرانیان، پارک علم و فناوری فردا

021-71058559

تمامی حقوق برای آکادمی آموزنگار محفوظ می باشد

اشتراک گذاری در شبکه های اجتماعی
ارسال به ایمیل
https://amooznegar.com/?p=11080
ورود
استفاده از شماره تلفن
استفاده از آدرس ایمیل
آیا هنوز عضو نشده اید؟ ثبت نام کنید
بازیابی رمز عبور
استفاده از شماره تلفن
استفاده از آدرس ایمیل
ثبت نام
استفاده از شماره تلفن
استفاده از ایمیل
قبلا عضو شده اید؟ ورود به سیستم
محافظت توسط   
مرورگر شما از HTML5 پشتیبانی نمی کند.

سوالی دارید؟ از ما بپرسید، کارشناسان ما در اسرع وقت با شما تماس می گیرند.

آموزنگار

آکادمی آموزنگار

  • 021-71058559
  • شنبه تا چهارشنبه از ساعت 8 تا 17
  • info@amooznegar.com