میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

چرخه ی حیات lifecycle در اندروید

این مبحث به شرح چرخه ی حیات یا  lifecycle اپلیکیشن در اندروید می پردازد.

در شرایط ایده ال، کلیه ی اپلیکیشن هایی که کاربر در دستگاه اندروید خود راه اندازی می کند، باید در حافظه باقی بمانند. ناگفته پیدا است که این امر در تسریع راه اندازی مجدد اپلیکیشن بسیار موثر است. اما حقیقت امر این است که حافظه ی دستگاه اندروید همانند اندازه ی خود دستگاه، کوچک بوده و دارای ظرفیت محدود می باشد. به منظور مدیریت بهینه ی این منابع محدود سیستم اندروید این اجازه را دارد که فرایندهای در حال اجرا را متوقف کرده یا کامپوننت های اندروید را بازیابی ( recycle ) کند. در صورتی که سیستم اندروید به این منابع نیاز داشته باشد، طبیعتا باید این منابع را آزاد کند. برای آزاد کردن این منابع از تعدادی قانون ساده پیروی می کند. در واقع هر فرایند در حال اجرا دارای اولویتی است که اندروید آن ها را بر اساس این اولویت از حافظه پاک می کند.

 

اولویتشرحوضعیت فرایند / process status
1اپلیکیشنی که کاربر در حال تعامل با activity آن می باشد یا دارای سرویسی است که به این activity متصل است. همچنین سرویسی که در حال اجرای یکی از متدهای مدیریت چرخه ی حیات ( lifecycle method ) بوده یا broadcast receiver ای که در حال فراخوانی و اجرای متد () onReceive خود می باشد.Foreground / پیش زمینه
2کاربر دیگر با activityت عامل ندارد، اما activity هنوز (تا اندازه ای) قابل مشاهده است یا اپلیکیشن مورد نظر سرویسی دارد که توسط activity قابل مشاهده اما غیرفعال مورد استفاده قرار می گیردقابل مشاهده / Visible
3اپلیکیشن با یک سرویس در حال اجرا که ویژگی های 1 یا 2 را نداردService
4اپلیکیشنی که تمامی activity های آن متوقف شده و هیچ سرویس یا دریافت کننده ای ندارد. سیستم اندروید تمامی آن ها را در یک لیست LRU نگه داشته و در صورت لزوم آن هایی که از تاریخ آخرین بار استفاده ی آن خیلی می گذرد یا کم ترین استفاده را داشته اند را از حافظه حذف می کندBackground / پس زمینه
5اپلیکیشنی که هیچ کامپوننت در حال اجرا و فعالی نداردEmpty

 

تمامی فرایندهایی که از اولویت ۶ برخوردار هستند (در رده ی Empty قرار می گیرند) به لیست LRUا ضافه می شوند و فرایندهایی که در ابتدای این لیست ها قرار دارند، توسط out of memory killer نابود می شوند (برای آزاد سازی منابع از حافظه حذف می شوند.) حال چنانچه اپلیکیشنی توسط کاربر مجددا راه اندازی شد، آن اپلیکیشن به انتهای صف هدایت می شود و اولویت آن به ۱ تغییر می یابد. این جریان در تصویر زیر به نمایش گذاشته شده است:

 

LRU

 

فراخوانی متد () get برای یک آیتم سبب می شود آن آیتم به انتهای حافظه ی (LRU (cache انتقال یابد.

 

 


آبجکت application

هر زمان که یک کامپوننت راه اندازی می شود، سیستم اندروید به صورت خودکار یک آبجکت application ایجاد می کند که این آبجکت تحت یک فرایند جدید با ID منحصربفرد و مختص به یک کاربر خاص ایجاد می شود. حتی اگر برنامه نویس آبجکت application را در فایل تنظیمات (AndroidManifest.xml ) در تگ application مشخص نکند، سیستم اندروید به صورت پیش فرض یک نمونه از کلاس  Application (همان آبجکت application ) ایجاد می کند (این آبجکت بیشتر برای نگهداری وضعیت و اطلاعات سراسری اپلیکیشن مورد استفاده قرار می گیرد.)

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

 

onCreate()

این متد قبل از اینکه اولین کامپوننت های اپلیکیشن راه اندازی شوند، فراخوانی می گردد. به عبارت دیگر این متد یک تابع callback است و هنگامی که activity برای نخستین بار اجرا می شود، فراخوانی می گردد

 

()onLowMemory

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

 

()onTrimMemory

این متد زمانی صدا خورده می شود که سیستم عامل احساس کند که فرایند باید میزان استفاده ی خود از حافظه را کاهش دهد. این اتفاق (برای مثال) زمانی می افتد که فرایند در وضعیت background قرار گرفته باشد و در این میان حافظه ی کافی برای فعال نگه داشتن تعداد دلخواه فرایند پس زمینه ای وجود ندارد. به عبارت دیگر، این متد زمانی فراخوانده می شود که سیستم اندروید از اپلیکیشن درخواست استفاده ی بهینه از حافظه/کاهش استفاده از آن را داشته باشد. این متد پارامترهایی دارد که از وضعیت جاری اپلیکیشن خبر می دهند. برای مثال، ثابت TRIM_MEMORY_MODERATE بیانگر این است که فرایند در اواسط لیست LRU قرار دارد. در این شرایط طبیعتا آزاد سازی حافظه به سیستم کمک می کند تا دیگر فرایندهای در حال اجرا را جهت بهبود کارایی کلی سیستم، در انتهای لیست مذکور نگه دارد

 

()onTerminate

تنها به منظور تست در محیط شبیه ساز بکار رفته و به هیچ وجه در بستر اجرا نهایی (محیط production) اپلیکیشن فراخوانی نمی شود

 

()onConfigurationChanged

این متد زمانی فراخوانده می شود که کامپوننت شما در حال اجرا است و در این حین تنظیمات و configuration دستگاه تغییر می کند

 

لازم به توضیح است که آبجکت application قبل از راه اندازی هر کامپوننتی ایجاد شده و حداقل تا زمانی که کامپوننت دیگری از اپلیکیشن راه اندازی نشده، به اجرا ادامه می دهد.

 


content provider چرخه ی حیات LifeCycle

هر زمان که content provider مورد دسترسی قرار می گیرد، این کامپوننت هیچگاه به صورت انفرادی و جداگانه متوقف نمی شود. به بیانی روشنتر این کامپوننت تنها زمانی کاملا متوقف می شود که کل فرایند اپلیکیشن خاتمه یابد.

 


امیدواریم آموزش چرخه ی حیات lifecycle در اندروید نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟