Lifecycle در اندروید چیست؟ مفهوم چرخه حیات و کاربرد کتابخانه lifecycle در اندروید
اپلیکیشن های اندرویدی تشکیل شده از سیستم های پیچیده ای هستند که باید با حالات، فرآیند ها و اجزای مختلفی سر و کار داشته باشند، مدیریت چرخه حیات این اجزا برای اطمینان از پایداری، عملکرد و تجربه کاربری برنامه یک نکته ضروری است، پلتفرم اندروید یک مکانیزم مدیریت چرخه حیات جامع ارائه می دهد که توسعه دهندگان را قادر می سازد تا چرخه حیات اجزای اپلیکیشن خود را مدیریت کنند، در این مقاله به بررسی مفهوم چرخه حیات (LifeCycle) و کتابخانه lifecycle در اندروید می پردازیم و همچنین تفاوت بین lifecycle و lifecycleScope را درک می کنیم، تا انتهای lifecycle در اندروید با من همراه باشید.
lifecycle در اندروید
چرخه حیات مجموعه ای از حالت هایی است که یک جزء اندروید در طول حیات خود از آن عبور می کند، هر جزء در یک برنامه اندروید دارای چرخه حیات منحصر به فردی است که رفتار و انتقال حالت آن را مشخص می کند، پلتفرم اندروید یک مکانیزم مدیریت چرخه حیات استاندارد را ارائه می دهد که تضمین می کند اجزای برنامه مطابق انتظار عمل می کنند و به رویدادهای سیستم و تعاملات کاربر به طور مناسب پاسخ می دهند.
مقاله پیشنهادی: null safety چیست؟
اجزای چرخه حیات در اندروید
چرخه حیات اندروید به مراحل یا حالت های مختلفی تقسیم می شود که یک جزء برنامه از آن عبور می کند، این حالت ها عبارتند از:
- Created: این اولین حالتی است که در چرخه حیات با آن مواجه می شویم؛ در این حالت، کامپوننت نمونه سازی شده است اما هنوز مقداردهی اولیه نشده است، این به این معنی است که کامپوننت کاملا کاربردی نیست و نمی تواند عملیات های مهمی را انجام دهد.
- Started: دومین موردی که در چرخه حیات با آن سروکار داریم Started است، در این حالت کامپوننت مقداردهی اولیه شده و آماده انجام وظایف خود می باشد؛ با این حال، هنوز برای کاربر قابل مشاهده نیست و همچنان المان های رابط کاربری به کاربر نمایش داده نشده و کاربر نمی تواند با اپلیکیشن تعامل برقرار کند.
- Resumed: سومین حالتی که در چرخه حیات با آن مواحه می شویم Resumed است، در این حالت کامپوننت برای کاربر قابل مشاهده است و کاربر می تواند با آن تعامل داشته باشد، این حالت فعال کامپوننت است و می تواند تمام وظایف خود را همانطور که انتظار می رود انجام دهد.
- Paused: بعد از این که با سه حالت بالا آشنا شدید، به Pause می رسیم، در این حالت، کامپوننت همچنان برای کاربر قابل مشاهده است، اما تمرکز خود را از دست داده است، این بدان معناست که کاربر نمی تواند با کامپوننت تعامل داشته باشد، اما همچنان فعال است و می تواند عملیات های خود را انجام دهد، برای مثال اگر اطلاعاتی از سرور در حال دریافت باشد متوقف نمی شود.
- Stopped: پنجمین حالتی که درمورد lifecycle در اندروید با آن کار داریم Stopped است، در این حالت کامپوننت دیگر برای کاربر قابل مشاهده نیست و حتی فعال هم نیست؛ با این حال، هنوز در کش برنامه وجود دارد و در صورت نیاز می توان آن را مجددا راه اندازی کرد.
- Destroyed: این وضعیت نهایی lifecycle در اندروید است، در این حالت، کامپوننت از کش برنامه حذف شده و دیگر در دسترس نیست.
تا به این جا با حالات مختلف چرخه حیات در اندروید آشنا شدید و از کاربرد آن ها می دانید، در ادامه به نکات مهم تری می پردازیم که بهتر است آن ها را هم بدانید، با من همراه باشید.
کتابخانه lifecycle در اندروید
همانطور که در بالا تر هم شاره داشتیم، پلتفرم اندروید مکانیزم مدیریت چرخه حیات را ارائه می دهد که توسعه دهندگان را قادر می سازد تا چرخه حیات اجزای برنامه خود را مدیریت کنند؛ با این حال، مدیریت چرخه حیات اجزای برنامه می تواند پیچیده و مستعد خطا باشد، برای ساده تر کردن این فرآیند، تیم اندروید کتابخانه Lifecycle را معرفی کرده است که مجموعه ای از کلاس ها را ارائه می کند که به توسعه دهندگان کمک می کند تا چرخه حیات اجزای اپلیکیشن شان را مدیریت کنند.
همانطور که گفتم، کتابخانه Lifecycle مجموعه ای از کلاس ها را فراهم می کند که توسعه دهندگان را قادر می سازد تا رخداد های چرخه حیات اجزای برنامهشان را نظارت کرده و به آنها پاسخ دهند، این کلاس ها و رابط ها عبارتند از:
Lifecycle
این رابطی است که چرخه حیات یک جزء اندروید را تعریف می کند، مجموعه ای از روش ها را فراهم می کند که توسعه دهندگان را قادر می سازد تا رخداد های چرخه حیات اجزای برنامه شان را نظارت کرده و به آن پاسخ دهند.
LifecycleOwner
این رابطی است که شی ای را تعریف می کند که چرخه حیات دارد، این رابط توسط کلاس های Activity و Fragment پیاده سازی می شود.
دوره پیشنهادی: دوره نخبگان معماری اندروید
LifecycleObserver
این رابطی است که یک شی را تعریف می کند که می تواند رویدادهای چرخه حیات یک LifecycleOwner را مشاهده کند، مجموعهای از متذ های برگشتی را ارائه می کند که توسعه دهندگان را قادر می سازد تا به رویداد های چرخه حیات LifecycleOwner پاسخ دهند.
LiveData
این کلاسی است که قابلیت مشاهده و انتشار داده ها را فراهم می کند، این توسعه دهندگان را قادر می سازد تا تغییرات در داده های برنامه را نظارت کنند و این تغییرات را به اجزای دیگری که به این داده ها بستگی دارند منتشر کنند، اگر تمایل دارید تا بیشتر در مورد Livedata بخوانید می توانید از مقاله ی livedata چیست نوری آکادمی دیدن کنید.
LifecycleRegistry
lifecycleRegistry کلاسی است که راهی برای مدیریت چرخه حیات LifecycleOwner ارائه می دهد، توسعه دهندگان را قادر می سازد تا حالت های چرخه حیات سفارشی را ایجاد کنند.
استفاده از کتابخانه lifecycle در اندروید
برای استفاده از کتابخانه Lifecycle در پروژه اندرویدی خودتان، باید قطعه زیر را به فایل build.gradle اپلیکیشن خود اضافه کنید.
dependencies { implementation "android.arch.lifecycle:extensions:1.1.1" }
می توانید با مراجعه به سایت رسمی اندروید به اطلاعات بیشتری در مورد dependency مربوط به lifecycle در اندروید دسترسی داشته باشید.
هنگامی که وابستگی را اضافه کردید، می توانید از کلاس ها و رابط های ارائه شده توسط کتابخانه lifecycle برای مدیریت چرخه حیات اجزای برنامه خود استفاده کنید، قطعه کد زیر نحوه استفاده از کتابخانه Lifecycle در اندروید را نشان می دهد:
class MyActivity : AppCompatActivity(), LifecycleOwner { private lateinit var lifecycleRegistry: LifecycleRegistry override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my) lifecycleRegistry = LifecycleRegistry(this) lifecycleRegistry.addObserver(MyObserver()) // other initialization code } override fun onStart() { super.onStart() lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START) } override fun onResume() { super.onResume() lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME) } override fun onPause() { super.onPause() lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE) } override fun onStop() { super.onStop() lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP) } override fun onDestroy() { super.onDestroy() lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY) } override fun getLifecycle(): Lifecycle { return lifecycleRegistry } private inner class MyObserver : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_START) fun onStart() { // انجام عملیات زمانی که کامپوننت آغاز شد } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) fun onStop() { // انجام عملیات زمانی که کامپوننت متوقف شد } } }
در این قطعه کد، اکتیویتی تعریف کرده ایم که رابط LifecycleOwner را پیاده سازی کرده و چرخه حیات آن را با استفاده از کلاس LifecycleRegistry مدیریت می کند، ما همچنین یک Observer سفارشی تعریف کرده ایم که رخداد های چرخه حیات اکتیویتی را مشاهده میکند و برخی اقدامات را بر اساس این رخداد ها انجام می دهد.
تفاوت lifecycleScope و lifecycle در اندروید
Lifecycle و LifecycleScope دو مفهوم متفاوت در اندروید هستند که اغلب با هم اشتباه گرفته می شوند، کتابخانه Lifecycle راهی برای مدیریت چرخه حیات یک کامپوننت اندروید ارائه میکند، در حالی که کتابخانه LifecycleScope راهی برای مدیریت چرخه حیات یک کوروتین را ارائه میکند که همین مورد این ها را باهم متمایز می کند.
کتابخانه LifecycleScope بخشی از کتابخانه coroutine در اندروید است و راهی برای راه اندازی کوروتین هایی ارائه می دهد که به یک چرخه حیات خاص محدود شدهاند، به این معنی است که وقتی کامپوننت مربوطه از بین می رود یا غیرفعال می شود، اپلیکیشن به طور خودکار لغو می شود، کتابخانه LifecycleScope راهی برای مدیریت چرخه حیات کوروتین و اطمینان از عدم ادامه کار پس از پایان چرخه حیات کامپوننت ارائه می دهد.
برای استفاده از کتابخانه LifecycleScope، باید وابستگی زیر را به فایل build.gradle برنامه خود اضافه کنید:
dependencies { implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.1" }
هنگامی که وابستگی را اضافه کردید، میتوانید از تابع extension lifecycleScope برای راهاندازی کوروتینهایی استفاده کنید که به یک چرخه حیات خاص محدود شدهاند، قطعه کد زیر نحوه استفاده از تابع افزونه lifecycleScope را نشان می دهد:
class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my) lifecycleScope.launch { // در این کوروتین عملیات را انجام بده } } }
در این قطعه کد، ما با استفاده از تابع افزونه lifecycleScope، برنامه ای را راه اندازی کرده ایم، این برنامه به چرخه حیات فعالیت محدود می شود و زمانی که فعالیت از بین رفت به طور خودکار لغو می شود.
تفاوت اصلی بین کتابخانههای Lifecycle و LifecycleScope همین جا است، یعنی این که کتابخانه Lifecycle راهی برای مدیریت چرخه حیات یک بخش از اپلیکیشن اندرویدی ارائه می کند، در حالی که کتابخانه LifecycleScope راهی برای مدیریت چرخه حیات یک کوروتین ارائه میکند، کتابخانه Lifecycle در اندروید راهی برای اطمینان از مدیریت صحیح منابع کامپوننت و حفظ و انتشار داده ها را در صورت نیاز فراهم میکند، در حالی که کتابخانه LifecycleScope، راهی برای اطمینان از لغو برنامه زمانی که چرخه حیات کامپوننت مرتبط به پایان میرسد، ارائه می کند.
کتابخانه Lifecycle بخش مهمی از اجزای معماری اندروید است و راهی برای مدیریت چرخه حیات یک جزء Android ارائه میکند، این کتابخانه مجموعه ای از کلاس ها و اینترفیس ها را فراهم می کند که توسعه دهندگان را قادر می سازد تا حالت های چرخه عمر سفارشی را تعریف کرده و چرخه حیات اجزای خود را مدیریت کنند.
از سوی دیگر، همان طور که اشاره داشتیم کتابخانه LifecycleScope راهی برای مدیریت چرخه حیات یک کوروتین ارائه می کند که به یک چرخه حیات خاص محدود شده است، این کتابخانه بخشی از کتابخانه کوروتین های کاتلین است و راهی برای اطمینان از لغو شدن برنامه زمانی که چرخه حیات کامپوننت مرتبط به پایان می رسد ارائه می دهد.
در نتیجه، کتابخانه Lifecycle و LifecycleScope دو مفهوم متفاوت در اندروید هستند که معمولا با هم اشتباه گرفته می شوند، کتابخانه Lifecycle راهی برای مدیریت چرخه حیات یک کامپوننت اندروید ارائه میکند، در حالی که کتابخانه LifecycleScope راهی برای مدیریت چرخه حیات یک کوروتین ارائه میکند، توسعهدهندگان باید از این کتابخانه ها با هم استفاده کنند تا اطمینان حاصل کنند که کامپوننت ها و برنامه های اپلیکیشن شان به درستی و کارآمد مدیریت می شوند.
از این که تا اینجای مقاله ی Lifecycle در اندروید با من همراه بودید سپاس گزارم.