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