چرخه حیات اکتیویتی اندروید به زبان ساده - 1

اکتیویتی به عنوان بدنه اصلی برنامه های اندروید در زمان اجرا میتونه در وضعیت های مختلفی قرار بگیره . این نقاط وضعیتی و حرکت بین این وضعیت ها به عنوان چرخه حیات اکتیویتی شناخته میشه . سعی میکنم با مثال ساده ای مفهوم این چرخه حیات رو برسونم . فرض میکنیم اکتیویتی یک خواننده است که دعوت شده برامون بخونه ، هر وضعیت هم یک اتاق و برای رفتن به هر اتاق هم اون خواننده باید از گیت هایی رد بشه و چیزایی رو بده یا بگیره . برای اینکه اکتیویتی بره بخونه باید بره اتاق اجرا اتاق اجرابرای رفتن به این اتاق باید به ترتیب از گیت هایی به نام (3)onCreate(1) , (2) , بگذره .حالا چرا این همه گیت ؟ خوب یه گیت onCreate میزاشتید تمام . بهتون میگم مسیر رفتن اکتیویتی به اتاق اجرافرض کنید تو هر گیت بهش یه چیز میدیم مثلا تو onCreate " لباس خوانندگی " ، تو " ساز موسیقی " و تو هم " دفتر نت موسیقی " ، فعلا در همین حد . اکتیویتی وقتی رفت تو اتاق میتونه بخونه . در واقع اینجا همون صفحه موبایلتونه که داره اکتیوتی توش اجرا میشه و باهاتون تعامل میکنه . وسط خوندن اکتیویتی کار موقتی برامون پیش میاد مثلا سیستم اندروید میاد بالا از ما میپرسه اجازه داره به چیزی دست بزنه ( permission ) . اینجاست که اکتیویتی موقتا میره به یه اتاق دیگه تا ما به کارمون برسیم ، برای خروج از این اتاق هم یه راه بیشتر نداریم ، فقط میشه رفت اتاق بعدی که " اتاق سکوت ".اتاق سکوتبرای اینکه از اتاق اجرا بیایم اتاق سکوت باید از گیت بگذریم . تو این گیت ازش " دفتر نت موسیقی " رو میگیرن تا نتونه ساز بزنه . هر چند ما بازم اکتیویتی رو میبینیم ولی اون نمیتونه برامون بخونه . مسیر رفتن از اتاق اجرا به اتاق سکوتاز اتاق سکوت میشه برگشت اتاق اجرا گیتش هم همون گیت که گفتیم کارش پس دادن " دفتر نت موسیقی " به اکتیویتی بوده به این سادگی اکتیویتی دوباره میره اتاق اجرا و میخونه . مسیر برگشت از اتاق سکوت به اتاق اجراحالا چه وسط اجرای اکتیویتی و چه زمانی که تو " اتاق سکوت " هست ، ممکنه این وسط گوشیمون زنگ بخوره ، اجبارا چون دیگه با اکتیویتی کاری نداریم ، باید بره اتاق دیگه به نام " اتاق خاموشی "اتاق خاموشیگیت ورودی به این اتاق که از اتاق سکوت میاد هست اینجا از اکتیویتی سازش رو میگیرن .به این اتاق ما دید نداریم و اکتیویتی رو نمیبینیم اونم چون " ساز " نداره و " دفتر نت " هم ازش گرفتن کلا میره بخوابه . درست مثل وقتی که یه برنامه دیگه اجرا میکنیم و اکتیوتیمون دیگه دیده نمیشه ولی تو recent app میتونیم ببینیم نشسته اونجا واسه خودش استراحت میکنه . مسیر رفتن به اتاق خاموشیاز این اتاق هم میشه رفت اتاق اجرا با عبور از گیت onRestart که کارش چک زدن تو گوش اکتیویتیه تا بیدار بشه و بعدش گیت خودمون که " ساز " رو پس میده بهش ، ولی مجبوره از هم رد بشه و " دفتر نت " رو هم پس میگیره میره میخونه .مسیر برگشتن به اتاق اجرا از اتاق خاموشیدر ضمن از این اتاق به بیرون ساختمان هم راه داره که باید از گیت دیگه ای به نام onDestroy رد بشه که " دفتر نت و ساز و لباس " ازش میگیرن و اینطوری اکتیویتی میره بیرون ساختمون و دیگه ازش خبری نداریم . مسیر خروج از ساختماناگه اکتیویتی ما اونجا لم بده و بخوابه و ما هم بریم یه چند تا خواننده دیگه بیاریم اجرا کنن ، بعدم اونا رو هم بفرستیمشون اتاق خاموشی استراحت کنن ، اگه اتاق خاموشی دیگه جا نداشته باشه مجبوریم اکتیویتی رو بندازیم بیرون و اگه بخواد دوباره بیاد بخونه باز مثل اول دوباره از سه تا گیت رد بشه و بره بخونه . در واقع مثل وقتی که حافظه رم گوشی پر میشه و اتوماتیک اپ های بلااستفاده رو kill میکنه.راستی تا یادم نرفته ، گیت دیگه هم قبل از گیت onDestroy داریم به نام onSaveInstanceState که میشه هر اطلاعاتی رو از اکتیویتی بگیریم ، تا تو گیت onCreate و پارامتر Bundle براش دوباره اماده کنیم . در ضمن اگه وقتی اکتیویتی تو اتاق اجراست و ساختمون رو بچرخونید ( گوشی رو بچرخونید ) ، باید اکتیویتی بره بیرون ساختمون دوباره بیاد و ناچارن یه راه بیشتر نداره از " اتاق اجرا " بره " اتاق سکوت " بعدم بره " اتاق خاموشی " بعد هم بیرون ساختمون و دوباره برگرده از اول و از همه گیت های بین اتاق هایی که گفتیم هم رد میشهدر این مثالی که زدیم و همونطور که در نمای کلی میبینید اتاق ها یه حالت هستند و تو هر بخش گفتیم مثلا چه حالتی تو صفحه موبایل اتفاق می افته ، ولی گیت ها در برنامه نویسی همون متد های معروف تو اکتیویتی هستند . سیستم اندروید بصورت اتوماتیک وقتی وضعیت اکتیویتی تغییر کنه این متد ها رو صدا میزنه و ما هم میتونیم ازشون برای کنترل اکتیویتی استفاده کنیم .چرخه حیات اکتیویتیبزارید یه مثال کاربردی بزنم . فرض کنید اکتیویتی ما یک کرنومتره و داره شروع به شمارش میکنه . حالا اگه اکتیویتی بره تو وضعیت خاموشی و بخوایم کرنومتر متوقف بشه باید تو کرنومتر متوقف بشه و دوباره تو onRestart یا کرنومتر رو راه بندازیم.