سبد (0)

ایجاد یک اپلیکیشن در مورد چرخه ی حیات

این آزمایش، ما را با متدهای چرخه ی حیات اندروید آشنا می کند و به ما امکان می دهد تا بیشتر با کدهای جاوا آشنا شویم:

 1. یک پروژه ی جدید در اندروید استودیو ایجاد کنید و نام آن را Lifecycle Demonstration بگذارید. شما می توانید کدهای این پروژه را در فایل دانلودی و در آدرس Chapter 6/Lifecycle Demonstration پیدا کنید و سپس آنها را در داخل پروژه کپی و الصاق کنید. 

 2. حالا دستگاه ها و تنظیمات پیش فرض را بپذیرید. 

3. در مراحل بعدی ایجاد پروژه، Blank Activity ( یا Basic Activity) را انتخاب کنید و سپس تنظیمات پیش فرض را بپذیرید. 

4. پس از ایجاد پروژه، فایل MainActivity.java را در داخل ادیتور باز کنید(در صورتی که باز نیست)؛ 

نکته: در صورتی که گام های قبلی برای شما واضح نیستند، می توانید به فصل های قبلی مراجعه کنید. 

با انجام گام های بالا، یک پروژه ی جدید ایجاد می شود و تمام  تنظیمات پیش فرض پذیرفته می شوند. در این پروژه، ما تنها به فایل MainActivity.java نیاز داریم و می خواهیم با آن کار کنیم. 

 


در فایل MainActivity.java متد onCreate را پیدا کنید و دو خط کد زیر را درست قبل از علامت آکولاد بسته({) از این متد قرار دهید؛ این آکولاد درواقع انتهای متد onCreate را مشخص می کند:

مثال(چرخه ی حیات در اندروید)

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(this, "In onCreate", Toast.LENGTH_SHORT).show();
Log.i("info", "In onCreate");
}

 اکنون متد onCreate باید شامل کدهای زیر باشد(کدهای دیگری نیز در داخل آن هستند). همچنین دو خط آخر، همان کدهایی هستند که اضافه نمودیم:

مثال(چرخه ی حیات در اندروید)

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(this, "In onCreate", Toast.LENGTH_SHORT).show();
Log.i("info", "In onCreate");
}

 پس از آکولاد بسته ی({) متد onCreate یک خط سفید فاصله بگذارید و سپس پنج متد چرخه ی حیات زیر را در آنجا قرار دهید(به همراه کدهایشان). همان طور که در فصل های اولیه نیز اشاره شد، به منظور import کردن کلاس های مورد نیاز برای دستورات Toast و Log، باید پس از کپی کردن کدها، دوبار کلید های Alt+Enter را فشار دهید. همچنین توجه کنید که ترتیب قرار دادن این کدها مهم نیست، زیرا اندروید بدون توجه به ترتیب شان، آنها را به طور صحیح مرتب می کند. 

نکته: این کدها در داخل فایل دانلودی قرار دارند. 

مثال(چرخه ی حیات در اندروید)

@Override
public void onStart() {
// First call the "official" version of this method
super.onStart();
Toast.makeText(this, "In onStart", Toast.LENGTH_SHORT).show();
Log.i("info", "In onStart");
}
@Override
public void onResume() {
// First call the "official" version of this method
super.onResume();
Toast.makeText(this, "In onResume", Toast.LENGTH_SHORT).show();
Log.i("info", "In onResume");
}
@Override
public void onPause() {
// First call the "official" version of this method
super.onPause();
Toast.makeText(this, "In onPause", Toast.LENGTH_SHORT).show();
Log.i("info", "In onPause");
}
@Override
public void onStop() {
// First call the "official" version of this method
super.onStop();
Toast.makeText(this, "In onStop", Toast.LENGTH_SHORT).show();
Log.i("info", "In onStop");
}
@Override
public void onDestroy() {
// First call the "official" version of this method
super.onDestroy();
Toast.makeText(this, "In onDestroy", Toast.LENGTH_SHORT).show();
Log.i("info", "In onDestroy");
}

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

 در کدهای بالا، اتفاقات زیر رخ می دهند:

1. اندروید کدهای ما را طبق همان روندی که توضیح دادیم(چرخه ی حیات) فراخوانی می کند.

2. کلمه ی کلیدی Override@ مشخص می کند که این متدها، جایگزین متدهای اصلی ارائه شده در API های اندروید شوند. 

نکته: توجه کنید که این متدهایی که می خواهیم بر روی آنها بازنویسی کنیم، قابل مشاهده نیستند؛ و اگر ما کدهای خود را بر روی آنها بازنویسی نکنیم، به جای متدهای ما، متدهای اصلی اندروید فراخوانی خواهند شد.

3. سپس دستور ...super.on که اولین خط از کدهای درون متدهای ما را تشکیل می دهد، متدهای اصلی اندروید را فراخوانی می کند. 
بنابراین همان طور که مشاهده می کنید، ما به همراه اجرای کدهای بازنویسی شده ی خود، متدهای اصلی اندروید را هم اجرا کرده ایم. 

نکته: از کلمه ی کلیدی super برای اشاره به کلاس های مافوق(بالایی) استفاده می شود. در آینده به طور کامل در مورد آن بحث خواهیم نمود. 

 در نهایت، برای هر متد یک پیغام با استفاده از دستور Toast و یک پیغام با استفاده از دستور Log ایجاد کردیم. این پیغام ها، در داخل این دو دستور و بین یک جفت دابل-کوتیشن(مثل"") قرار گرفته اند. هریک از این پیغام ها که نمایش یابد، با استفاده از پیام درون خود، مشخص می کند که کدام متد اجرا شده است. حالا که کمی کدها را توضیح دادیم، وقت آن رسیده است که اپلیکیشن خود را اجرا کنیم تا کمی بیشتر با چرخه ی حیات در اندروید آشنا شویم. 

 


گام های زیر را انجام دهید:

1. اپلیکیشن مورد نظر را در داخل یک شبیه ساز و یا یک دستگاه واقعی اجرا کنید. 

2. حالا صفحه ی نمایش شبیه ساز را نگاه کنید؛ خواهید دید که پیغام های زیر به ترتیب نشان داده می شوند:

  • In onCreate
  • In onStart
  • In onResume

3. حالا در پنجره ی logcat پیغام های زیر را مشاهده کنید. در صورتی که در این پنجره پیغام های زیادی وجود دارند، می توانید از لیست کشویی گزینه ی Info را انتخاب کنید:

  • in onCreate
  • in onStart
  • in onResume

4. اکنون در شبیه ساز یا در دستگاهی که برنامه ی ما در حال اجرا است، بر روی دکمه ی back(باز گشت) کلیک کنید. خواهید دید که پیغام های زیر توسط Toast به ترتیب ایجاد می شوند.

 

  1. In onPause
  2. In onStop
  3. In onDestroy

همچنین اگر به خروجی های ایجاد شده در پنجره ی logcat نگاه کنید، باید پیغام های مشابهی را مشاهده کنید. 

5. حالا یک اپلیکیشن دیگر را به دلخواه اجرا کنید. مثلا می توانید اپلیکیشن Hello Android که در فصل 1 ایجاد شد را اجرا کنید.

6. سپس بر روی دکمه ی مربعی شکل، در شبیه ساز خود کلیک کنید( به عکس زیر توجه کنید):

 

7. حالا می توانید تمام اپلیکیشن هایی که در دستگاه شما در حال اجرا هستند را مشاهده کنید. به تصویر زیر دقت کنید:


8. حالا اپلیکیشن Lifecycle Demonstration را انتخاب کنید. خواهید دید که سه پیغام اولیه (که قبلا به آنها اشاره کردیم) نمایش داده می شود. دلیل این امر این است که اپلیکیشن ما قبلا destroy(نابود) شده است. 

9. اما اکنون دوباره بر روی دکمه ی مربعی شکل(task manager) کلیک کنید و اپلیکیشن Hello Android را انتخاب کنید. اکنون همان طور که مشاهده می کنید، تنها پیغام های In onPause و In onStop به ما نشان داده می شوند. همچنین اطمینان حاصل کنید که این خروجی به دست آمده  با خروجی درون پنجره ی logcat یکسان باشد. توجه کنید که این اپلیکیشن نابود(destroy) نشده است. 

 10. اکنون دوباره بر روی  دکمه ی مربعی شکل(task manager) کلیک کنید و اپلیکیشن  Lifecycle Demonstration را انتخاب کنید. خواهید دید که تنها پیغام های In onStart و onResume نشان داده می شوند. این نشان می دهد که برای بازآوری یک اپلیکیشن در دفعات بعد، نیازی به onCreate نیست. زیرا ما این اپلیکیشن را نابود(destroy) نکرده ایم. 

 


اکنون اجازه دهید تا در مورد آنچه در بالا مشاهده کردیم، کمی بحث کنیم. در گام های بالا، ابتدا اپلیکیشن Lifecycle Demonstration را برای اولین بار اجرا کردیم و دیدیم که متدهای onCreate و onStart و onResume فراخوانی شدند. سپس وقتی که با استفاده از دکمه ی بازگشت(back) این اپلیکیشن را بستیم، متدهای onPause و onStop و onDestroy فراخوانی شدند. 

 علاوه بر این، می دانیم که نسخه های اصلی تمام این متدها نیز فراخوانی شده اند، زیرا ما خودمان با استفاده از دستورات ...super.on  آنها را در داخل متدها فراخوانی کردیم. 

 همان طور که مشاهده کردید، وقتی که از دکمه ی مربعی شکل(task manager) برای رفتن به یک اپلیکیشن دیگر استفاده کردیم، این اپلیکیشن نابود(destroy) نشد، بنابراین وقتی که دوباره به آن برگشتیم، نیازی به اجرای متد onCreate نبود. 

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