Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

چرخهِ زندگیِ Activity اندروید چیست ؟

by
Difficulty:BeginnerLength:MediumLanguages:

Persian (پارسی) translation by Erfan Rezaeimehr (you can also view the original English article)

در پُستِ قبلیِ من، شما آموختید که intent ها به ما اجازه ی ارسال پیام از یک component اندروید به دیگری را میدهند. بسیار خُب، یکی از مهمترین component ها یک Activity است.

اکتیویتی ها بخشِ اساسی از توسعه یک اپلیکیشن اندرویدی هستند. و بدونه فهمیدن چرخهِ زندگیشان، غیر ممکن است که آنها را یاد بگیرید. در این پُست، شما در مورد چَرخهِ زندگیِ اکتیویتی ها می آموزید.

چرخهِ زندگیِ Activity

اکتیویتی یک صفحه نمایش در اندروید، که شبیه به یک window ( پنجره ) در برنامه های desktop، یا یک Frame در برنامه های جاوا است. یک اکتیویتی به شما اجازه میدهد که تمام UI component ها یا widget ها را با یکدیگر در یک صفحه قرار دهید.

بسیار مهم است که شما بفهمید که اکتیویتی دارای یک چرخهِ زندگی است: زیرا اکتیویتی، میتواند وابسطه به چیزی که در اپلیکیشن در حال اتفاق است و یا به وسیله ی تعامل کاربر، در موقعیت های مختلفی قرار داشته باشد.

Lifecycle Methods

بیاید نگاه نزدیکتری به چرخهِ زندگیِ یک اکتیویتی در اندروید بی اندازیم. هر زمان که موقعیت اکتیویتی عوض میشود، یکی از مِتُدهای چرخهِ زندگیهِ زیر، در کلاس اکتیویتی صدا از میشود.

onCreate() : این مِتُد زمانی که اکتیویتی برای بار اول مقدار دهی میشود، صدا زده میشود. شما برای مقدار دهیِ اولیه کردنِ هر اکتیویتی، به پیاده سازی این مِتُد نیاز دارید.

onStart() : این مِتُد، اولین باری که اکتیویتی قرار است برای کاربر بنمایش در بیاید، صدا زده میشود، به عنوان اکتیویتیِ آماده، برای پیش زمینه شدن، تبدیل به اکتیویتیِ قابل تعامل برای کاربران میشود. زمانی که این فراخوانی تمام میشود، مِتُدِ onResume() صدا زده میشود.

onResume() : زمانی که اکتیویتی به این موقعیت میرسد، شروع به تعامُل با کاربر میکند. اکتیویتی تا زمانی که اتفاقی بی افتد که باعث برداشته شدنِ تمرکز اَپلیکیشن یا اکتیویتی بشود (مانند زنگ خوردن دستگاه)، به کار خود ادامه میدهد. زمانی که این اتفاق بی افتد مِتُدِ onPause() صدا زده میشود.

onPause(): این متد برای متوقف کردن عملیات هایی که نباید در زمان موقعیت paused اجرا بشوند، استفاده میشود. صدا زدنِ این مِتُد، خارج شدن کاربر از اپلیکیشن را نشان میدهد. برای مثال، دریک اپلیکیشن پخش موسیقی، زنگ خوردن گوشی اپلیکیشن را به موقعیت paused انتقال میدهد. در آن زمان باید موسیقی در حال پخش متوقف یا بی صدا بشود. زمانی هم که کاربر به اپلیکیشن باز میگردد، مِتُدِ onResume() صدا زده میشود.

onStop(): این مِتُد زمانی که اکتیویتی، در اَپلیکیشن دیگر قابل مشاهده نیست صدا زده میشود. برای مثال: زمانی که اکتیویتیِ دیگری بارگذاری و تمام صفحه نمایش دستگاه را میگیرد، این متد صدا زده میشود. زمانی که این مِتُد صدا زده میشود، به اکتیویتی گفته میشود که در موقعیت stopped قرار بگیرد. همچنین سیستم در این موقعیت متدِ onRestart() را برای برگرداندنِ اکتیویتیِ صدا میزند. یا متدِ onDestroy() را برای از بین بُردنِ اکتیویتی صدا میزند.

onDestroy(): این مِتُد قبل از از بین رفتن اکتیویتی صدا زده میشود. سیستم این متد را زمانی که یک کاربر اکتیویتی را از بین میبرد صدا زده میزند، یا برای سیستمی که موقتا در حال نابود کردنِ پردازشی که شامل اکتیویتی برای ذخیره ی فضا میشود، صدا زده میشود. مطمئن بشوید که همه ی منابعِ اکتیویتی تان که در این مِتُد ساخته شده اند، آزاد شده است. در غیر این صورت اپلیکیشن شما با کمبود حافطه مواجه خواهد شد.

onRestart() : این متُد زمانی که یک اکتیویتی بعد از استاپ شدنش ، ری استارت میشود، صدا زده میشود.

Starting an Activity

بیشتر تعاملات کاربر با یک اَپلیکیشن موجب به عوض شدنِ اکتیویتیِ فعال میشود، بنابراین انتقالاتِ میانِ اکتیویتی ها زیاد انجام میشود.

زمانی که یک اکتیویتی نیاز به صدا کردن اکتیوتیِ دیگری دارد، متصل کردن اکتیویتی ها به هم کاری ضروری است، از دو مِتُدِ startActivity() یا startActivityForResult() برای صدا زدن یک اکتیویتی استفاده میشود. باید به هر کدام از این متدها یک intent پاس بدهید.

صدا زدن اکتیویتی با نتایج مورد انتظار

startActivity() اگر اکتیویتیِ صدا زده شده نیاز به برگشت نداشته باشد از این متد استفاده میکنیم.

نمونه کد زیر به شما نشان میدهد که چگونه اکتیویتیِ دیگر را به وسیله ی این متد صدا بزنیم.

همچنین شما میتوانید کارهایی مانندِ فرستادنِ داده از یک اکتیویتی به اکتیویتی دیگر را انجام دهید. برای این کار، اکتیویتیِ جاری ( اکتیویتی صدا زده شده ) میخواهد داده را به اکتیویتیِ مقصد بفرستد. اینجاست که intent ها به کار می آیند. برای یادگیری در موردِ استفاده از intent ها برای صدا زدن یک اکتیویتی، نگاهی به مقاله ی قبلیِِ من بی اندازید.

صدا زدن یک اکتیوتی با یک نتیجه

startActivityForResult() برای صدا زدنِ اکتیویتیِ دیگر و انتظار پاسخ گرفتن از اکتیویتیِ جدید، استفاده می شود. به عبارت دیگر، زمانی از این متد استفاده کنید که میخواهید یک نتیجه ای را از اکتیویتی هدف پس بگیرید. برای مثال اکتیویتیِ هدف بعضی اطلاعاتِ کاربر را جمع آوری میکند.

نتیجه را از اکتیویتی، در مِتُدِ onActivityResult(int requestCode, int resultCode, Intent data) دریافت میکنید. نتیجه به عنوان یک intent برگردانده میشود.

مثالی از صدا زدن یک اکتیویتی

در اینجا مثالی برای نشان دادن چگونگیِ صدا زدن اکتویتی نشان میدهم.

اول، MainActivity را با مِتُدِ onCreate() بسازید ، یک فایل layout، و یک کد درخواست.

در مِتُدِ onCreate() ، یک نمونه جدید از یک intent برای اکتیویتی دوم می سازیم.

زمانی که برای صدا زدن اکتیویتی آماده بودید، در پاسخی برای کلیک کردن بر روی دکمه، متدِ startActivityForResult() را که intent تازه ساخته شده و کدِ درخواست را به عنوان آرگومان میگرد، صدا بزنید.

هنوز در MainActivity ، شما به مدیریت و کنترلِ رویدادهای نتیجه ی اکتیویتی، نیاز دارید. شما این کار را با پیاده سازیِ مِتُدِ onActivityResult() انجام میدهید. به این صورت شما نتیجه را از اکتیویتی دیگر دریافت میکنید.

کدهای شما باید به این شکل باشد:

حالا SecondAcitivty را بسازید. باید چیزی شبیه به کُدِ زیر باشد.

پایان یک اکتیویتی

قبل از آنکه یک اکتیویتی کارش را تمام کند مِتُد های مربوط به چرخهِ زندگی اش صدا زده میشود.

مِتُدِ onPause() باید تمام شنونده ها و UI ها را بروز رسانی کند. مِتُدِ onStop() باید داده ی اپلیکیشن را ذخیره کند. و در آخر مِتُدِ onDestroy() تمام منابعی که اکتیویتی به خود اختصاص داده است را، آزاد میکند.

زمانی که کاربر به اپلیکیشنی که، سیستم به آن خاتمه داده است بازمیگردد. مِتُدِ onResume() صدا زده می شود. بر اساس داده های ذخیره شده، میتواند شنونده ها و UI هارا بروزرسانی کند.

موقعیتِ Activity Instance

یک اکتیوتی نیاز به راهی برای نگه داشتنِ موقعیت های ارشمند و داده های کاربری که به دست آورده، دارد. شاید این داده ها از ورودی های کاربر و یا در زمانی که کاربر اکتیویتی را نمی بیند، بدست آمده باشد.

برای مثال، یک تغییرِ جهتِ دستگاه میتواند سببِ نابود شدن یا دوباره ساخته شدنِ یک اکتیویتی بشود. در این موضوع، شما نیاز دارید اطمینان پیدا کنید که تمام موقعیت های اکتیویتی قبل ازاین که از بین برود و دوباره ساخته شود ذخیره می شوند. در غیر این صورت هر داده ای که اکتیویتی شما در آن زمان دارد، می تواند از بین برود.

برای ذخیره کردن موقعیتِ اکتیویتی، می توانید متدِ onSaveInstanceState() را اورراید( بازنویسی ) کنید. این متد یک پارامتر به عنوان شیِ Bundle میگیرد. یک Bundle میتواند از رشته ها و نوع های دادهِ primitive، یا شی ها تشکیل شود. در این متد، به راحتی میتوان هر داده موقعیتِ مهم را به bundle اضافه کرد. این bundle بعدا به اکتیویتی باز میگردد، بنابراین شما میتوانید موقعیت اکتیویتی را بازیابی کنید.

برای extract و بازیابی کردنِ موقعیتِ ذخیره شده از bundle، باید متدِ onRestoreInstanceState() را پیاده سازی کنید. این فراخوانی در میانِ onStart() و onResume() متدهای چرخه زندگی اجرا میشود.

ما در مقاله های آینده، نگاه دقیق تری به موقعیت نمونهِ اکتیویتی می اندازیم.

جمع بندی و نتیجه گیری

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

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

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.