Skip to main content

بررسی چرخه حیات اکتیویتی

Explore the activity lifecycle

در اندروید، اکتیویتی ها به عنوان تسک هایی گروه بندی می شوند. هر برنامه اندرویدی شامل یک یا چند تسک است. وقتی یک برنامه اندرویدی اجرا می شود، اولین اکتیویتی آن، یعنی اکتیویتی لانچ، روی صفحه نمایش ظاهر می شود. هر اکتیویتی که ظاهر می شود، در پشته ای از اکتیویتی ها قرار می گیرد. اگر کاربر دکمه Back را فشار دهد، آخرین اکتیویتی موجود در پشته حذف می شود و اکتیویتی قبلی در پشته ظاهر می شود.یک اکتیویتی می تواند در یکی از پنج وضعیت زیر قرار داشته باشد: Created، Started، Resumed، Paused و Stopped که هر وضعیت اکتیویتی با یک متد خاص در کلاس اکتیویتی همراه است. این متدها می توانند برای انجام کارهای خاصی در هر وضعیت مورد استفاده قرار گیرند. در این درس بطور کامل به تمامی این مباحث پرداخته ایم.

لینک کمکی (official link) – چرخه حیات اکتیویتی ها در اندروید

اکتیویتی ها در اندروید

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

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

پشته اکتیویتی ها

اگر از یک اکتیویتی به اکتیویتی دوم برویم، اکتیویتی دوم ظاهر میشود و اکتیویتی اول میرود پشت آن قرار میگیرد. مثل اینکه یک پشته از اکتیویتیها در یک صف قرار میگیرند و هر اکتیویتی که ظاهر شود اکتیویتی قبلی میرود پشت سر آن، که اصطلاحاً به آن میگویند back stack. حالا اگر کاربر دکمه Back دستگاه را فشار دهد، یا برنامه طبق یک دستوری اکتیویتی دوم را ببندد، این اکتیویتی از پشته حذف میشود و اکتیویتی اول روی صفحه نمایش ظاهر میشود.

حالا فرض کنید کاربر دکمه Home جلوی دستگاه اندرویدی خود را فشار دهد و بخواهد یک برنامه جدید را باز کند. حالا یک تسک دیگر ایجاد میشود، که پشته‌ای از اکتیویتیهای این برنامه جدید را دارد. کاربر به دو روش میتواند بین این تسکها رفت و آمد کند. هم با رفتن به صفحه Home با فشار دادن دکمهHome  و بعد هم مشاهده و انتخاب تسک اول و یا با انتخاب یکی از تسکهای باز از لیست همه open task ها. میتواند بین این تسکها رفت و آمد کند. به هر حال، همه این اکتیویتیها تا زمانی در دسترس‌اند که دستگاه حافظه و منابع کافی داشته باشد. ولی هر موقع که سیستم عامل تشخیص دهد که حافظه کم است، میتواند تعدادی از تسکها و اکتیویتیهای غیرفعال را از حافظه حذف کند. بنابراین اگر کاربر دوباره به آن برنامه نیاز داشت، مجبور است مجدداً آنرا راه‌اندازی کند.

چند تا قانون برای پشته‌های اکتیویتیها وجود دارد.

در یک دستگاه، فقط یک اکتیویتی در هر زمان میتواند فعال باشد.

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

اکتیویتی و فعالیتهایی هم که قبلاً فعال بودند در صف پشته یاbackstack  بعنوان فعالیتهای قبلی وجود دارند. شما میتوانید اکتیویتیهای زیادی را در back stack داشته باشید که البته آنها لازمه عملکرد صحیح برنامه شما هستند. فقط این مورد را بدانید که framework برنامه در شرایط کمبود حافظه میتواند این اکتیویتیها را از حافظه حذف کند.

وضعیت های اکتیویتی ها

یک اکتیویتی میتواند در یکی از وضعیتهای مختلفی که الان میگویم قرار بگیرد. به طور کلی وضعیتهای گذرایی وجود دارد که یک اکتیویتی از آن وضعیتها میگذرد و به یک وضعیت دیگر میرود و همینطور وضعیتهای راکد هم وجود دارد.

اگر یک اکتیویتی فعال به ما نمایش داده شود، میگویند در حالت active یا resumed قرار دارد. این یعنی، آن اکتیویتی در بالا پشته قرار دارد. قابل نمایش است و کاربر میتواند با آن کار کند.

یک اکتیویتی در حالت paused هم وجود دارد که قابل دیدن است، ولی تمرکز کاربر روی آن نیست. فرض کنید، برنامه‌ای باز است و سمت چپ صفحه نمایش هم یک لیست دارید، یعنی سمت راست لیستمان بطور مثال یک صفحه با یکسری جزئیات مربوط به برنامه در حال اجرا، داشته باشیم. اگر کاربر برود روی لیست و آنرا اسکرول کند، صفحه نمایش مربوط به جزئیات برنامه‌ای که باز است، میرود روی وضعیت paused. حالا اگر کاربر برود روی صفحه نمایش برنامه و مثلاً چیزی را تایپ کند، اینبار صفحه نمایش مربوط به لیست میرود روی حالت paused. یعنی هر دو اکتیویتی نمیتوانند در یک زمان فعال باشند.

یک اکتیویتی که در پشت stack یا پشته ما گذاشته میشود، ولی از حافظه حذف نمیشود، اصطلاحاً میگویند در حالت stop قرار دارد. دیده نمیشود، ولی میتواند در همین وضعیت باقی بماند.

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

متدهای چرخه حیات اکتیویتی ها

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

نکات مهم در مورد چرخه حیات اکتیویتی ها

وقتی یک اکتیویتی ساخته میشود، اول از همه وارد وضعیت Created میشود، و متد onCreate() توسط  فریم ورک برنامه فراخونی میشود. معمولاً در این متد کدهای آن لایوتی که به این اکتیویتی مرتبط میشود و قرار است نمایش داده شود معرفی میشود.

بعد وارد وضعیت Start میشود و متدی به نام onStart() فراخوانی میشود.

و در نهایت وضعیت Resume، و فراخوانی متد onResume(). وقتی در وضعیت Resume قرار دارد، قابل دیدن است، ولی غیر فعال. خب؛ حالا وقتی کاربر میخواهد اکتیویتی را ببندد، از سه وضعیت دیگر عبور میکند.

برای عبور از وضعیت Pause، وارد متد onPause() میشود و بعد اگر به طور کامل غیر قابل دیدن شود وارد متد onStop() میشود.

و وقتی به طور کامل از حافظه حذف شود هم متد onDestroy() فراخوانی میشود. در این وضعیتها یکسری اتفاقات جالب می‌افتد.

اگر یک اکتیویتی در وضعیت Stoppe قرار بگیرد و بخواهید به وضعیت Resume بروید، از سه وضعیت باید عبور کند. اول متدی به نام onRestart() و بعد onStart(). از آنجا دوباره متد onResume() فراخوانی میشود.

و اگر یک اکتیویتی در وضعیت Pause باشد، و مجدداً فعال شود، باید وارد متد onResume() شود. بهترین راه برای اینکه این وضعیتهای اکتیویتیها برای شما ملموس شود، این است که همه این متدها را در برنامه فراخوانی کنید و کدنویسی کنید و موقع اجرا ببینید چه اتفاقی می‌افتد. من در ویدئوهای بعدی اشاراتی به این موضوع خواهم کرد.

دیدگاهتان را بنویسید

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

دوره ها
درس ها
طهاکو من
0