چرخه زندگی در توسعه موبایل: چیست، چه مراحلی دارد و چگونه کار می‌کند

نویسنده: IT Sectr منتشر شده: 2026-03-02 زمان مطالعه: 9 دقیقه

چرخه زندگی یک برنامه موبایل تعیین می‌کند که برنامه در هنگام راه‌اندازی، کوچک‌سازی، بازگشت از پس‌زمینه و بسته شدن چگونه رفتار می‌کند. در این مقاله به بررسی App Lifecycle (iOS)، Activity Lifecycle (Android)، Fragment Lifecycle، ViewController Lifecycle و LifecycleOwner می‌پردازیم. درک این فرآیندها برای جلوگیری از نشت حافظه، از دست دادن داده و عملکرد نادرست برنامه بسیار مهم است. جزئیات بیشتر در مستندات رسمی Android Activity Lifecycle.

نکات کلیدی

  • Activity Lifecycle (Android) شامل ۷ روش است: onCreate → onStart → onResume → onPause → onStop → onDestroy + onRestart
  • ViewController Lifecycle (iOS) به ترتیب فراخوانی می‌شود: viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear
  • iOS App Lifecycle دارای ۵ حالت است: Not Running, Inactive, Active, Background, Suspended
  • Fragment Lifecycle به Activity متصل است اما روش‌های خاص خود را دارد: onAttach, onCreateView, onViewCreated
  • LifecycleOwner (Android) امکان اشتراک در رویدادهای چرخه زندگی را از طریق LifecycleObserver فراهم می‌کند

چرخه زندگی برنامه (App Lifecycle)

قبل از پرداختن به چرخه زندگی صفحات جداگانه، درک چرخه زندگی کل برنامه مهم است. در iOS، برنامه از پنج حالت عبور می‌کند: Not Running (در حال اجرا نیست)، Inactive (در پس‌زمینه، رویدادها را دریافت نمی‌کند)، Active (فعال)، Background (در پس‌زمینه، کد در حال اجراست) و Suspended (در پس‌زمینه، کد متوقف شده). این حالت‌ها در AppDelegate از طریق روش‌های applicationDidFinishLaunching، applicationDidBecomeActive، applicationWillResignActive، applicationDidEnterBackground و applicationWillTerminate مدیریت می‌شوند.

در Android، معادل آن Application Lifecycle است که از طریق رابط Application.ActivityLifecycleCallbacks ردیابی می‌شود. با این حال، Android بیشتر بر چرخه زندگی یک Activity — یک صفحه برنامه جداگانه — تمرکز می‌کند.这是因为 یک برنامه Android می‌تواند از چندین Activity تشکیل شده باشد که هر کدام چرخه خاص خود را دارند.

رویکرد مدرن در Android استفاده از ProcessLifecycleOwner از کتابخانه lifecycle-process است. این امکان ردیابی وضعیت کل فرآیند را بدون وابستگی به یک Activity خاص فراهم می‌کند. در iOS، از UISceneDelegate (از iOS 13) یا AppDelegate برای ردیابی وضعیت برنامه استفاده می‌شود. SceneDelegate چندین پنجره (multiwindow) را در iPad مدیریت می‌کند. درک App Lifecycle برای IT Sectr هنگام توسعه برنامه‌های دارای همگام‌سازی پس‌زمینه، پخش جریانی و تماس‌های VoIP بسیار مهم است.

Activity Lifecycle در Android

Activity مؤلفه اصلی یک برنامه Android است که یک صفحه را نشان می‌دهد. Activity دارای چرخه زندگی مشخصی است که توسط سیستم عامل در پاسخ به اقدامات کاربر و رویدادهای سیستم (چرخش صفحه، تماس ورودی، کمبود حافظه) مدیریت می‌شود.

روش توضیحات چه باید کرد
onCreateیک بار هنگام ایجاد Activity فراخوانی می‌شودراه‌اندازی UI، findViewById، تنظیم ViewModel
onStartActivity قابل مشاهده می‌شودشروع انیمیشن‌ها، ثبت BroadCastReceiver
onResumeActivity فوکس ورودی را دریافت می‌کندشروع دوربین، سنسورها، انیمیشن‌ها
onPauseActivity فوکس را از دست می‌دهد (تا حدی قابل مشاهده)ذخیره پیش‌نویس‌ها، توقف انیمیشن‌ها
onStopActivity قابل مشاهده نیستآزادسازی منابع، توقف به‌روزرسانی‌ها
onDestroyActivity نابود می‌شودپاکسازی همه ارجاعات، لغو اشتراک LiveData
onRestartبعد از onStop و قبل از onStart فراخوانی می‌شودراه‌اندازی مجدد

مهم: onSaveInstanceState قبل از onStop برای ذخیره وضعیت موقت فراخوانی می‌شود. بازیابی در onCreate از طریق Bundle savedInstanceState یا از طریق SavedStateHandle در ViewModel انجام می‌شود. بدون مدیریت صحیح چرخه زندگی، برنامه در هنگام چرخش صفحه تمام داده‌های ذخیره نشده را از دست می‌دهد.

kotlin
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("draft", draftText)
    }
    override fun onDestroy() {
        super.onDestroy()
        // Отписка от всех подписок
    }
}

Activity Lifecycle در Jetpack Compose

در Jetpack Compose، چرخه زندگی Activity بدون تغییر باقی می‌ماند، اما Compose ابزارهای اضافی ارائه می‌دهد: ترکیب آگاه از چرخه زندگی از طریق LifecycleOwner، افکت‌های LifecycleEventEffect و DisposableEffect برای پاکسازی خودکار منابع هنگام نابودی.

Fragment Lifecycle با جزئیات

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

روش‌های کلیدی Fragment Lifecycle: onAttach — Fragment به Activity متصل شد (اولین فراخوانی)؛ onCreate — راه‌اندازی داده؛ onCreateView — ایجاد View؛ onViewCreated — View ایجاد شد، UI قابل پیکربندی است؛ onStart — Fragment قابل مشاهده؛ onResume — Fragment در فوکس؛ onPause — Fragment فوکس را از دست می‌دهد؛ onStop — Fragment قابل مشاهده نیست؛ onDestroyView — View نابود می‌شود؛ onDestroy — Fragment نابود می‌شود؛ onDetach — Fragment از Activity جدا می‌شود.

تفاوت کلیدی با Activity: onCreateView و onDestroyView می‌توانند چندین بار فراخوانی شوند (مثلاً هنگام جابجایی TabLayout)، در حالی که onCreate یک بار فراخوانی می‌شود. بر این اساس، راه‌اندازی View باید در onViewCreated انجام شود، نه در onCreateView. منابع مربوط به View (مانند آداپتورهای RecyclerView) باید در onDestroyView پاکسازی شوند.

ViewController Lifecycle در iOS

UIViewController کلاس پایه برای مدیریت صفحات در iOS است. چرخه زندگی آن شامل دنباله‌ای از روش‌هاست که UIKit به طور خودکار فراخوانی می‌کند. درک این چرخه برای راه‌اندازی صحیح UI، مدیریت داده و حافظه بسیار مهم است.

روش چه زمانی فراخوانی می‌شود استفاده معمول
loadViewوقتی View Controller سلسله‌مراتب View خود را بارگذاری می‌کندراه‌اندازی سفارشی بدون storyboard
viewDidLoadپس از بارگذاری View در حافظه (یک بار)تنظیم UI، بارگذاری داده‌های اولیه
viewWillAppearقبل از ظاهر شدن View روی صفحهبه‌روزرسانی داده، اشتراک در اعلان‌ها
viewDidAppearپس از ظاهر شدن View روی صفحهشروع انیمیشن‌ها، شروع انیمیشن‌های ردیابی
viewWillDisappearقبل از ناپدید شدن View از صفحهذخیره وضعیت، لغو اشتراک اعلان‌ها
viewDidDisappearپس از ناپدید شدن View از صفحهتوقف انیمیشن‌ها، آزادسازی منابع
deallocهنگام نابودی View Controllerآزادسازی همه منابع

مهم: viewDidLoad فقط یک بار در طول عمر View Controller فراخوانی می‌شود. برای به‌روزرسانی داده در هر بار ظاهر شدن، از viewWillAppear استفاده کنید. اگر در viewWillAppear در NotificationCenter اشتراک می‌کنید، حتماً در viewDidDisappear اشتراک را لغو کنید تا از نشت حافظه جلوگیری شود.

SwiftUI Lifecycle

SwiftUI چرخه زندگی View را از طریق ساختارهای View مدیریت می‌کند. به جای روش‌های بازخوانی، SwiftUI از اصلاح‌کننده‌های onAppear و onDisappear استفاده می‌کند. برای وضعیت‌های سراسری برنامه، App Lifecycle از طریق پروتکل‌های App و Scene استفاده می‌شود. SwiftUI به طور خودکار ایجاد و نابودی View را بر اساس وضعیت مدیریت می‌کند که توسعه را ساده می‌کند اما نیاز به درک هویت و طول عمر View دارد.

swift
struct ContentView: View {
    var body: some View {
        Text("Hello")
            .onAppear {
                print("View появилась")
            }
            .onDisappear {
                print("View исчезла")
            }
    }
}

LifecycleOwner و LifecycleObserver در Android

LifecycleOwner یک رابط از Android Architecture Components است که یک شیء دارای چرخه زندگی (Activity, Fragment) را علامت‌گذاری می‌کند. LifecycleObserver یک رابط است که به یک شیء اجازه می‌دهد در رویدادهای LifecycleOwner مشترک شود. با هم، آنها پایه مدیریت واکنشی چرخه زندگی در توسعه مدرن Android را تشکیل می‌دهند.

به جای فراخوانی صریح روش‌ها در onStart/onStop، توصیه می‌شود از DefaultLifecycleObserver (جایگزین LifecycleObserver قدیمی با حاشیه‌نویسی‌های @OnLifecycleEvent) استفاده کنید. این رویکردی است که توسط Google برای ViewModel و سایر مؤلفه‌هایی که نیاز به واکنش به چرخه زندگی بدون داشتن ارجاعات مستقیم به Activity یا Fragment دارند، ترویج می‌شود.

kotlin
class MyObserver : DefaultLifecycleObserver {
    override fun onStart(owner: LifecycleOwner) {
        // Подписка на обновления
    }
    override fun onStop(owner: LifecycleOwner) {
        // Отписка
    }
}

در IT Sectr، ما از LifecycleOwner در تمام پروژه‌های Android استفاده می‌کنیم. ViewModel از طریق viewModelScope و lifecycleScope در LifecycleOwner Activity مشترک می‌شود و لغو خودکار کوروتین‌ها را هنگام نابودی Activity تضمین می‌کند. این کار از نشت حافظه جلوگیری می‌کند و کد را تمیزتر و امن‌تر می‌کند.

سوالات متداول

Activity در Android چه حالت‌هایی را طی می‌کند؟

Activity شش حالت را طی می‌کند: Created (onCreate), Started (onStart), Resumed (onResume), Paused (onPause), Stopped (onStop), Destroyed (onDestroy).

روش‌های ViewController Lifecycle در iOS به چه ترتیبی فراخوانی می‌شوند؟

ترتیب: loadView → viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear. viewDidLoad یک بار فراخوانی می‌شود.

LifecycleOwner در Android چیست؟

LifecycleOwner مؤلفه‌ای از Android Architecture Components است که صاحب چرخه زندگی Activity یا Fragment است. امکان اشتراک در رویدادها را از طریق LifecycleObserver فراهم می‌کند.

App Lifecycle در iOS چه حالت‌هایی دارد؟

برنامه iOS پنج حالت را طی می‌کند: Not Running, Inactive, Active, Background, Suspended. انتقالات از طریق UIApplicationDelegate مدیریت می‌شوند.

Saved State در Android چیست؟

Saved State مکانیزم Android برای حفظ وضعیت Activity/Fragment در هنگام چرخش صفحه یا بازآفرینی فرآیند است. از onSaveInstanceState و SavedStateHandle استفاده می‌کند.

خلاصه

  • Activity Lifecycle در Android (onCreate → onDestroy) — اساس مدیریت وضعیت صفحه
  • iOS ViewController Lifecycle (viewDidLoad → viewDidDisappear) — کلید عملکرد صحیح UIKit
  • Fragment Lifecycle به دلیل onAttach/onDetach و onCreateView/onDestroyView پیچیده‌تر از Activity است
  • LifecycleOwner (Android) امکان اشتراک واکنشی در رویدادها را بدون نشت حافظه فراهم می‌کند
  • App Lifecycle وضعیت کل برنامه (Active, Background, Suspended) را مدیریت می‌کند
  • SwiftUI به جای روش‌های سنتی ViewController از onAppear و onDisappear استفاده می‌کند
  • مدیریت صحیح چرخه زندگی از ۸۰٪ از خرابی‌های معمول برنامه‌های موبایل جلوگیری می‌کند

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه