جستجو برای:
سبد خرید 0
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
ورود
[suncode_otp_login_form]
گذرواژه خود را فراموش کرده اید؟
عضویت
[suncode_otp_registration_form]

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

ارسال مجدد کد یکبار مصرف (00:60)
  • 02171058559
  • info@amooznegar.com
  • علاقمندی ها
آکادمی آموزنگار
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

آکادمی آموزنگار > اخبار > برنامه نویسی > اندروید > چرخه حیاط اکتیویتی (lifecycle) در اندروید

چرخه حیاط اکتیویتی (lifecycle) در اندروید

1398-08-01
ارسال شده توسط آموزنگار
اندروید
چرخه حیات lifecycle اکتیویتی در اندروید

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

درک صحیح Lifecycle اکتیویتی یکی از مهم‌ترین مباحث در برنامه‌نویسی اندروید است؛ زیرا عدم مدیریت درست آن می‌تواند باعث مشکلاتی مثل:

  • مصرف بیش از حد باتری
  • کاهش Performance
  • کرش کردن برنامه
  • نشت حافظه (Memory Leak)

در این مقاله کاملاً یاد می‌گیرید چرخه حیاط اکتیویتی چیست، چرا مهم است و چگونه باید آن را مدیریت کنیم.

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

در اندروید، زمانی که یک اکتیویتی جدید اجرا می‌شود و اکتیویتی قبلی متوقف می‌شود، این تغییرات از طریق متدهای پاسخگویی چرخه حیاط اکتیویتی (Activity Lifecycle Callback Methods) مدیریت می‌شوند.

هر اکتیویتی دارای چندین متد پاسخگویی است که بسته به وضعیت آن، توسط سیستم اندروید فراخوانی می‌شوند. این متدها عبارت‌اند از:

  • ایجاد اکتیویتی (Creating Activity): زمانی که اکتیویتی برای اولین بار ایجاد می‌شود.
  • متوقف شدن اکتیویتی (Stopping Activity): هنگامی که اکتیویتی به پس‌زمینه می‌رود و فعالیت آن متوقف می‌شود.
  • از سرگیری اکتیویتی (Resuming Activity): زمانی که اکتیویتی دوباره فعال شده و پردازش آن از سر گرفته می‌شود.
  • از بین رفتن اکتیویتی (Destroying Activity): هنگامی که اکتیویتی به‌طور کامل از حافظه خارج شده و دیگر قابل استفاده نیست.

هر یک از این متدها فرصتی را برای اجرای عملیات خاصی متناسب با وضعیت سیستم فراهم می‌کنند. به عنوان مثال:

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

برای نصب و راه اندازی ابزارهای برنامه نویسی اندروید با جزئیات بیشتر آموزش نصب و راه اندازی اندروید به مقاله ما مراجعه کنید.

📌 اهمیت و مزایای یادگیری چرخه حیاط

شناخت Lifecycle فقط یک مفهوم تئوری نیست؛ بلکه پایه بسیاری از بخش‌های اندروید است. با یادگیری آن می‌توانید:

✔ مدیریت درست منابع (باتری، رم، CPU)
✔ جلوگیری از Memory Leak
✔ ذخیره اطلاعات هنگام چرخش صفحه یا خروج کاربر
✔ اجرای درست سرویس‌ها و درخواست‌های شبکه
✔ ساخت اپلیکیشن‌های حرفه‌ای‌تر و پایدارتر
✔ کنترل رفتار برنامه هنگام Call، SMS یا Notification

پس برنامه‌نویسان حرفه‌ای اندروید همیشه چرخه حیاط را مدیریت می‌کنند.

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

onCreate() → onStart() → onResume() → (Activity is running)
onPause() → onStop() → onDestroy()

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

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

📌 اهمیت و مزایای یادگیری چرخه حیات

شناخت Lifecycle فقط یک مفهوم تئوری نیست؛ بلکه پایه بسیاری از بخش‌های اندروید است. با یادگیری آن می‌توانید:

✔ مدیریت درست منابع (باتری، رم، CPU)
✔ جلوگیری از Memory Leak
✔ ذخیره اطلاعات هنگام چرخش صفحه یا خروج کاربر
✔ اجرای درست سرویس‌ها و درخواست‌های شبکه
✔ ساخت اپلیکیشن‌های حرفه‌ای‌تر و پایدارتر
✔ کنترل رفتار برنامه هنگام Call، SMS یا Notification

پس برنامه‌نویسان حرفه‌ای اندروید همیشه چرخه حیات را مدیریت می‌کنند.

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

  1. onCreate() – زمانی که اکتیویتی برای اولین بار ایجاد می‌شود، این متد فراخوانی شده و در آن باید عملیات اولیه مانند ایجاد رابط کاربری، مقداردهی اولیه متغیرها، و تنظیمات مورد نیاز انجام شود.
  2. onStart() – این متد زمانی اجرا می‌شود که اکتیویتی به کاربر نمایش داده می‌شود، اما هنوز تعامل مستقیمی با او ندارد.
  3. onResume() – زمانی که اکتیویتی فعال می‌شود و کاربر مستقیماً با آن تعامل دارد، این متد اجرا شده و عملیات‌هایی مانند پخش ویدیو، دریافت داده زنده یا فعال کردن سنسورها در این مرحله انجام می‌شود.
  4. onPause() – هنگامی که اکتیویتی در حال متوقف شدن است (مثلاً کاربر برنامه را ترک می‌کند یا تماس دریافت می‌شود)، این متد اجرا شده و باید منابعی مانند دوربین، سنسورها و شبکه آزاد شوند.
  5. onStop() – زمانی که اکتیویتی دیگر به کاربر نمایش داده نمی‌شود (مثلاً برنامه به پس‌زمینه می‌رود)، این متد فراخوانی شده و معمولاً در این مرحله باید ذخیره‌سازی داده‌ها و آزاد کردن منابع سنگین انجام شود.
  6. onDestroy() – قبل از اینکه اکتیویتی به‌طور کامل از بین برود، این متد اجرا می‌شود و معمولاً برای پاک‌سازی نهایی و جلوگیری از نشت حافظه استفاده می‌شود.
  7. onRestart() – هنگامی که یک اکتیویتی که متوقف شده بود، مجدداً شروع به کار کند، این متد فراخوانی شده و باعث بازگرداندن منابع و داده‌های ذخیره‌شده می‌شود.
دسترسی و ساماندهی منابع اندروید
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

چرا مدیریت صحیح چرخه حیاlifecycle اکتیویتی مهم است؟

✅ جلوگیری از کرش‌های ناگهانی هنگام دریافت تماس یا تغییر برنامه
✅ بهینه‌سازی مصرف منابع مانند پردازنده، باتری و حافظه
✅ حفظ تجربه کاربری روان و بدون اختلال
✅ جلوگیری از از دست رفتن داده‌های کاربر هنگام تغییر وضعیت اپلیکیشن

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

خوب همون طور که در تصویر بالا دید زمان های مختلفی از یک اکتیویتی نشان داده شده که خانه اندروید مهمترین بخش ها رو خدمت شما معرفی می کنه وقتی کاربر وارد یک اکتیویتی می شود برای اولین بار برنامه اندرویدی ما وارد متد onCreate میشه و کدهای موجود در اون رو Run می کنه خوب حالا اگه کاربر برروی یک دکمه کلیک کنه و وارد یه اکتیویتی جدید بشه اکتیویتی قبلی وارد onPause میشه و اگه کاربر مدت زمان زیادی رو وارد اکتیویتی قبلیه نشه اکتیویتی وارد onStop و بعد مدتی هم وارد onDestroy میشه .

خوب حالا اگه اکتیویتی داخل onPause باشه و کاربر به اکتیویتی برگرده کدهای موجود در onResume اجرا میشه ولی اگه اکتیویتی بسته شده باشه کدهای داخل onCreate از نو شروع میشه .

Lifecycle callbacks:

متد () onCreate :

()onSaveInstanceState متدی است که شما می توانید با آن وضعیت فعلی اکتیویتی تان را ذخیره کنید. سیستم این متد را قبل از اینکه اکتیویتی نابود شود و به شیئ Bundle فرستاده شود، فرا میخواند. Bundle جایی است که شما می توانید اطلاعات مربوط به وضعیت اکتیویتی تان را مانند نام ها با استفاده از متد ()putString، ذخیره کنید. حال اگر سیستم اکتیویتی شما را نابود کند و کاربر به اکتیویتی برگردد، سیستم Bundle را به ()onCreate ارسال میکند و بنابراین با این روششما می توانید وضعیت قبلی اکتیویتی تان را که با استفاده از متد ()onSaveInstanceState ذخیره کرده بودید، بازیابی کنید. اگر اطلاعاتی برای بازیابی موجود نباشد، مقدار Bundleی که به ()onCreate ارسال شده است، تهی (null) خواهد بود.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    Log.d("Lifecycle", "onCreate called")
}

متد () onStart :

درست قبل از اینکه اکتیویتی برای کاربر قابل مشاهده باشد، فراخوانی می شود. اگر اکتیویتی به جلو یا پشت دیگر اکتیویتی ها برود، باید متدهای ()onResume و ()onStop بعد از آن اجرا شود.

متد () onResume :

این متد دقیقاً قبل از اینکه اکتیویتی بخواهد با کاربر تعاملش را آغاز کند، فراخوانی میشود. در این زمان، اکتیویتی در بالاترین نقطه انباره (Stack) قرار دارد و میتواند با کاربر در تعامل باشد. همیشه بعد از آن متد ()onPause باید اجرا شود.

override fun onResume() {
    super.onResume()
    Log.d("Lifecycle", "onResume called")
}

متد () onPause :

این متد زمانی فراخوانی میشود که اکتیویتی دیگری میخواهد اجرا شود (Resume). بطور معمول از این متد برای انجام کارهایی مانند ذخیره اطلاعاتی که هنوز ذخیره نشده اند، توقف انیمیشن و یا سایر کارهایی که CPU را بخودش درگیر کرده است، استفاده میشود. هر کاری که قرار است انجام شود باید بسیار سریع انجام شود زیرا تا زمانیکه وظیفه این متد انجام نشود، اکتیویتی بعدی اجرا نمیشود. متد بعد از این ()onResume است اگر اکتیویتی مجدداً بخواهد به نمایش درآید و یا ()onStop است اگر بخواهد از دید و دسترس کاربر پنهان شود.

override fun onPause() {
    super.onPause()
    Log.d("Lifecycle", "onPause called")
}

متد () onStop :

زمانی اجرا میشود که اکتیویتی دیگر در دسترس کاربر نیست. این متد ممکن است بدلیل اینکه دارد نابود میشود، یا بدلیل اینکه اکتیویتی دیگری (چه اکتیویتی ای که قبلاً اجرا شده و الان در استک است و چه اکتیویتی جدید باشد) کارش را از سر گرفته است و دستور اینکار را داده باشد ، اجرا شود. متد بعد از آن ()onRestart است اگر اکتیویتی میخواهد برگردد تا در دسترس کاربر قرار گیرد و یا ()onDestroy است اگر اکتیویتی بخواهد نابود شود.

override fun onStop() {
    super.onStop()
    Log.d("Lifecycle", "onStop called")
}

متد () onDestroy :

این متد دقیقاً قبل از اینکه اکتیویتی بخواهد نابود شود، اجرا میشود. بعبارت دیگر این متد آخرین فراخوانی است که اکتیویتی دریافت خواهد کرد. این فراخوانی ممکن است به این دلیل باشد که اکتیویتی به پایان انجام وظیفه اش رسیده است (کسی متد ()finish را اجرا کرده است)، یا سیستم بمنظور در اختیار گرفتن فضای بیشتر نیاز دارد تا بعضی از اکتیویتی را نابود کند. متد ()isFinishing وجه تمایز دو سناریوی فوق است.

ایجاد انواع Build Variant در اندروید
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

وقتی اکتیویتی کاملاً بسته می‌شود.

override fun onDestroy() {
    super.onDestroy()
    Log.d("Lifecycle", "onDestroy called")
}

📱 چرخه حیات در اپلیکیشن‌های واقعی — چه زمانی کاربرد دارد؟

کاربردمثال
ذخیره داده‌ها هنگام خروج کاربرفرم ثبت‌نام
توقف ویدیو هنگام رفتن به بک‌گراندMediaPlayer
لغو درخواست API هنگام خروج از صفحهRetrofit
ذخیره وضعیت UI هنگام Rotate شدن گوشیOrientation Change
آزاد کردن حافظهتوقف Sensorها یا GPS

حرکت ما بین اکتیویتی ها:

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

شروع یک اکتیویتی

بسته به اینکه آیا Activity شما می خواهد نتیجه را از یک Activity جدید شروع کند و یا ممکن است Activity جدید را با استفاده از روش ()startActivity یا () startActivityForResult شروع کنید. در هر صورت، شما یک شی (Intent) Object را منتقل میکنید.

Intent در لغت به معنای انجام کار است. در اندروید هم تا حدود زیادی همین معنی را می رساند. به اینصورت که به واسطه intent به سیستم عامل اندروید اعلام می کنیم قصد انجام چه کاری را داریم و سیستم عامل چه کاری باید برای ما انجام دهد. به طور کلی اینتنت واسطی است مابین کامپوننت های مختلف (شامل Activity ها، Service ها، Broadcast Receiver ها) درون یک اپلیکیشن و یا مابین چند اپلیکیشن. کاربرد های متعددی برای اینتنت وجود دارد که شاید ساده ترین آن را بتوان انتقال بین دو Activity درون یک اپلیکیشن دانست. در Intent شما می توانید فعالیت و نوع آنرا مشخص کنید. یک Intent همچنین می تواند مقادیر کوچکی از داده ها را که توسط Activity هایی که آغاز شده است، حمل کند.

متد () startActivity :

وقتی که با اپلیکیشن کار می کنید شما اغلب نیاز دارید که به از یک اکتیویتی به اکیتیویتی دیگر بروید یا (launch) کنید.برای مثال کد زیر نشان می دهد که چگونه می توان با استفاده از intent یک اکتیویتی را صدا زد :

Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);

برنامه شما ممکن است بخواهد که یک (action) یا یک فعالیت را مانند ارسال ایمیل ی ارسال یک پیام (message) در این صورت میتوان intent را به صورت زیر تغییر داد :

Intent intent = new Intent(Intent.ACTION_SEND);
 
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
 
startActivity(intent);

در بالا از EXTRA_EMAIL استفاده شده است یک آرایه رشته ای از آدرس های ایمیل می باشد که باید بصورت ایمیل فرستاده شود.

📱 چرخه حیات در اپلیکیشن‌های واقعی — چه زمانی کاربرد دارد؟

کاربردمثال
ذخیره داده‌ها هنگام خروج کاربرفرم ثبت‌نام
توقف ویدیو هنگام رفتن به بک‌گراندMediaPlayer
لغو درخواست API هنگام خروج از صفحهRetrofit
ذخیره وضعیت UI هنگام Rotate شدن گوشیOrientation Change
آزاد کردن حافظهتوقف Sensorها یا GPS

🔁 حفظ داده هنگام چرخش صفحه (Rotation)

override fun onSaveInstanceState(outState: Bundle) {
    outState.putString("name", userName)
    super.onSaveInstanceState(outState)
}

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    super.onRestoreInstanceState(savedInstanceState)
    userName = savedInstanceState.getString("name", "")
}

🚀 جمع‌بندی

  • هر Activity دارای چرخه حیات مشخص است.
  • یادگیری Lifecycle برای جلوگیری از Memory Leak ضروری است.
  • متدهای مهم: onCreate, onResume, onPause, onStop, onDestroy
  • باید در هر مرحله منابع را درست مدیریت کنیم.
  • برای ساخت اپلیکیشن حرفه‌ای، کنترل Lifecycle ۱۰۰٪ ضروری است.
قبلی کتاب آموزشی کاتلین Android Development with Kotlin
بعدی ایجاد پروژه در اندروید استودیو

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • GoLang
  • jetpack compose
  • PHP
  • اپلیکیشن
  • امنیت
  • اندروید
  • اوپن سورس
  • برنامه نویسی
  • برنامه نویسی iOS
  • برنامه نویسی react native
  • پادکست صوتی
  • تکنولوژی
  • جاوا
  • طراح رابط کاربری
  • طراحی رابط کاربری
  • طراحی وب
  • عمومی
  • فریلنسر
  • فلاتر
  • فناوری
  • کاتلین
  • کتاب های آموزشی
  • کسب و کار
  • لینوکس
  • هوش مصنوعی
  • وردپرس
برچسب‌ها
admob Compose coroutine dagger dagger-hilt jetpack nft rxandroid rxjava spring swift ارز دیجیتال امنیت در اندروید دارت فایربیس فوشیا مصاحبه کاری معماری mvi نقشه راه برنامه نویسی کاتلین گوگل

Logo Light

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

دسترسی سریع
  • خانه
  • دوره ها
  • اخبار
  • تماس با ما
خبرنامه

چیزی را از دست ندهید، ثبت نام کنید و در مورد شرکت ما مطلع باشید.

نمادها
© 1402. تمامی حقوق برای آکادمی آموزنگار محفوظ می باشد.
ورود
با شماره موبایل
با آدرس ایمیل
آیا هنوز عضو نشده اید؟ اکنون ثبت نام کنید
بازنشانی رمزعبور
با شماره موبایل
با آدرس ایمیل
ثبت نام
با شماره موبایل
با آدرس ایمیل
قبلا عضو شده اید؟ اکنون وارد شوید
محافظت شده توسط