آموزش برنامه نویسی اندروید با اندروید استودیو (بخش هشتم:آشنایی با چرخه حیات Activity در برنامه نویسی اندروید)
در بخش قبلی در مورد اکتیویتی صحبت کردیم. در آخر آن بخش شما در فایل Xml یک اکتیویتی اصلی را مشاهده نمودید.
در این بخش در مورد این اکتیویتی ها صحبت بیشتری خواهد شد و چرخه حیات Activity به صورت کامل برای شما توضیح داده می شود.
چرخه حیات اکتیوینی دقیقا چیست؟
در اپلیکیشن هایی که طراحی خواهیم کرد و یا اپلیکیشن های حاضر در دستگاه اندرویدی شما، هر اپلیکیشن از چندین اکتیویتی تشکیل شده است.
وقتی یک کاربر، اپلیکیشن را اجرا می کند، هر اکتیویتی، بخشی از حافظه ی اصلی دستگاه را تشکیل خواهد داد. این اکتیویتی ها در واقع از منابع دستگاه شما استفاده خواهند نمود، پس سرعت دستگاه را نیز پایین می آورند.
فرض کنید دو نوع اکتیویتی داریم. اکتیویتی A و اکتیویتی B.
از اکتیویتی A به اکتیویتی B می رویم. سوالی که پیش می آید اینست که چه بلایی بر سر اکتیویتی A می آید؟ آیا بسته می شود؟ آیا هنوز در حال اجراست؟
اگر اکتیویتی B منابع کمی مصرف نماید، چه می شود؟ اگر منابع زیادی مصرف نماید چه؟ اگر زمان اکتیویتی B خیلی طول بکشد چه می شود؟ اگر کم طول بکشد چه می شود؟
سوال های متعددی ممکن است در این باره پیش آید.
این سوالات همگی به یک چیز می رسند! چرخه حیات
پس آشنایی و مدیریت چرخه حیات می تواند به بهتر شدن اپلیکیشن اندرویدی مان کمک بسیار شایانی نماید.
مدیریت چرخه حیات Activity
هفت حالت برای مدیریت چرخه حیات وجود دارد. این هفت حالت عبارت اند از:
()onCreate (ایجاد):
این اولین فراخوانی چرخه حیات است که با ایجاد اپلیکیشن فراخوانی می شود.
()onStart (شروع):
این فراخوانی هنگامی که اکتیویتی برای کاربر، نمایان می شود انجام می شود.
()onResume (ادامه):
این فراخوانی وقتی که کاربر دوباره شروع به تعامل با اپلیکیشن می کند، انجام می شود.
()onPause (مکث):
وفتی این فراخوانی انجام می شود، اکتیویتی نمی تواند به داده های ورودی کاربر جواب دهد و یا کدی را اجرا نماید. این فراخوانی وقتی انجام میشود که فعالیت دیگری، آغاز می شود و فعالیت فعلی به مرحله مکث می رود.
()onStop (توقف):
این فراخوانی وقتی انجام می شود که اکتیویتی دیگر فعال و یا نمایان نیست.
()onDestroy (نابود شدن):
این فراخوانی قبل از آن که فعالیت توسط سیستم بخواهد نابود شود، اجرا می شود.
()onRestart (راه اندازی مجدد):
این فراخوانی هنگامی اجرا می شود که اکتیویتی که قبلا متوقف (Stop) شده بود، بخواهد دوباره راه اندازی شود.
تا به حال گفته شده هر متد که فراخوانی می شود، در یک جایی از چرخه حیات قرار دارد. این موضوع را با این عکس بهتر درک کنید.
از آنجایی که بعضی چیزها در برنامه نویسی وقتی ترجمه می شوند، معنای اصلی خود را از دست می دهند.
جملات و اصطلاحات انگلیسی نیز در تصویر وجود دارد. پس اصل، انگلیسی است و ترجمه فقط برای درک بهتر آورده شده است.
دوستانی که در دانشگاه درس سیستم های عامل را خوانده اند اگر به یاد داشته باشند، هر فرایند چندین مرحله از زمان ایجاد تا پایان داشت. در اینجا نیز اتفاقی مشابه رخ می دهد.
سعی می کنیم تصویر بالا را با یک مثال برای شما توضیح دهیم.
فرض می کنیم که یک اپلیکیشن داریم با دو Activity به نام های A و B. مثال را با اکتیویتی A جلو می بریم.
زمانی که کاربر برای اولین بار اکتیویتی A را ایجاد نماید (این اتفاق فقط در پشت صحنه می افتد و کاربر خودش ممکن است اصلا از اکتیویتی خبر نداشته باشد)، مرحله ()onCreate یعنی ایجاد شدن اکتیویتی، فراخوانی می شود.
سپس اکتیویتی شروع می شود. پس متد ()onStart نیز فراخوانی می شود. حال باید اکتیویتی ادامه داشته باشد پس متد ()onResume فراخوانی می شود.
این مرحله به همین صورت در این قسمت می ماند(تمام نشده است). حال اکتیویتی B می خواهد اجرا شود. ابتدا اکتیویتی A باید منتظر بماند تا مراحل اکتیویتی B اجرا شود پس به مرحله ()onPause می رود. و اکتیویتی B به همان صورت اجرا می شود.
اگر برای زمانی طولانی به اکتیویتی A برنگردیم، اکتیویتی A، متد ()onStop را فراخوانی می کند و متوقف می شود.
اگر حافظه ی کافی برای اکتیویتی A وجود نداشته باشد، متد ()onDestroy فراخوانی می شود.
ایجاد اکتیویتی به دو صورت خودکار و دستی
سوالی که پیش می آید اینست که ما چگونه یک Activity را در کدهایمان ایجاد نماییم.
ابتدا به فایل MainActivity.java در اندروید استادیو می رویم.
قبلا مشاهده کردید که درون کلاس اصلی جاوا، یک اکتیویتی اصلی به صورت خودکار ایجاد شده بود.
حال برای ایجاد یک اکتیویتی دیگر، وقتی هنوز در کلاس اصلی جاوا و خارج از اکتیویتی اصلی هستیم، کلید های ترکیبی Ctrl + O را فشار می دهیم.
:می توانید اکتیویتی ها را به صورت دستی نیز ایجاد نمایید که باید از کدهای زیر استفاده کنید. کدهای زیر مربوط به 7متد اکتیویتی می باشد
package com.example.helloworld; import android.os.Bundle; import android.app.Activity; import android.util.Log; public class MainActivity extends Activity { String msg = "Android : "; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(msg, "The onCreate() event"); } /** Called when the activity is about to become visible. */ @Override protected void onStart() { super.onStart(); Log.d(msg, "The onStart() event"); } /** Called when the activity has become visible. */ @Override protected void onResume() { super.onResume(); Log.d(msg, "The onResume() event"); } /** Called when another activity is taking focus. */ @Override protected void onPause() { super.onPause(); Log.d(msg, "The onPause() event"); } /** Called when the activity is no longer visible. */ @Override protected void onStop() { super.onStop(); Log.d(msg, "The onStop() event"); } /** Called just before the activity is destroyed. */ @Override public void onDestroy() { super.onDestroy(); Log.d(msg, "The onDestroy() event"); } }