App Lifecycle: यह क्या है, iOS और Android में ऐप की अवस्थाएँ

लेखक: IT Sectr प्रकाशित: 2026-03-02 पढ़ने का समय: 8 मिनट
App Lifecycle (ऐप का जीवनचक्र) उन अवस्थाओं का क्रम है जिनसे एक मोबाइल ऐप लॉन्च से समाप्ति तक गुज़रता है। जीवनचक्र को समझना संसाधन प्रबंधन, डेटा संरक्षण और स्थिरता सुनिश्चित करने के लिए महत्वपूर्ण है। iOS में, ऐप अवस्थाओं से गुज़रता है: Not Running → Active → Inactive → Background → Suspended। Android में — onCreate → onStart → onResume → onPause → onStop → onDestroy + onRestart के माध्यम से। प्रत्येक अवस्था डेवलपर को स्थिति सहेजने, संसाधन मुक्त करने या वापसी की तैयारी के लिए एक अवसर देती है। Apple दस्तावेज़ीकरण के अनुसार, जीवनचक्र घटनाओं को अनदेखा करना ऐप को छोटा करने पर 40 % क्रैश का कारण है। IT Sectr में, हमने सभी परियोजनाओं के लिए Android में ProcessLifecycleOwner और iOS में AppDelegate पैटर्न को अनिवार्य मानकों के रूप में लागू किया — इससे पृष्ठभूमि से संबंधित बग 60 % कम हुए।

मुख्य बिंदु

  • App Lifecycle — लॉन्च से समाप्ति तक ऐप अवस्थाओं का समूह, प्रत्येक विशिष्ट डेवलपर क्रियाओं के साथ।
  • AppDelegate — जीवनचक्र प्रबंधन के लिए केंद्रीय iOS वर्ग: didFinishLaunching, didEnterBackground, willEnterForeground।
  • SceneDelegate — अलग-अलग दृश्यों के लिए प्रतिनिधि (iOS 13+), बहु-विंडो ऐप में प्रत्येक विंडो के जीवनचक्र का प्रबंधन।
  • ProcessLifecycleOwner — AndroidX Lifecycle का एक Android घटक जो पूरी प्रक्रिया के जीवनचक्र को ट्रैक करता है।
  • Application.onCreate — Android ऐप का पहला प्रवेश बिंदु, किसी भी Activity से पहले कॉल किया जाता है।

App Lifecycle क्या है?

App Lifecycle एक सीमित अवस्था मशीन है जो मोबाइल ऐप की सभी संभावित अवस्थाओं और उनके बीच संक्रमण का वर्णन करती है। प्रत्येक अवस्था निर्धारित करती है कि ऐप कोड निष्पादित कर सकता है, UI प्रदर्शित कर सकता है और संसाधनों का उपभोग कर सकता है। iOS और Android के मॉडल समान लेकिन समान नहीं हैं — अंतर OS आर्किटेक्चर के कारण हैं: iOS सख्त मेमोरी नियंत्रण (suspended अवस्था) का उपयोग करता है, जबकि Android onSaveInstanceState के माध्यम से लचीला प्रक्रिया प्रबंधन का उपयोग करता है।

iOS में, जीवनचक्र अग्रभूमि/पृष्ठभूमि से कसकर जुड़ा होता है: ऐप या तो सक्रिय है या निलंबित। Android में, जीवनचक्र अधिक दानेदार है — एक Activity/विंडो 6+ अवस्थाओं से गुज़रती है, और प्रक्रिया का स्वयं ProcessLifecycleOwner के माध्यम से एक अतिरिक्त जीवनचक्र होता है। आधुनिक ऐप (2024 से) तेज़ी से जीवनचक्र-आधारित आर्किटेक्चर पैटर्न का उपयोग कर रहे हैं: SwiftUI Lifecycle (iOS 16+) .scenePhase पर्यावरण के माध्यम से, Compose Lifecycle LifecycleEventObserver के माध्यम से। ये पैटर्न स्वचालित रूप से संदर्भ स्विचिंग को संभालते हैं और मेमोरी लीक को रोकते हैं। Google के अनुसार, Android में उचित जीवनचक्र प्रबंधन पृष्ठभूमि कार्य के दौरान मेमोरी खपत को 30–40 % तक कम करता है।

iOS जीवनचक्र: AppDelegate और SceneDelegate

iOS में, ऐप जीवनचक्र UIApplicationDelegate वर्ग (AppDelegate) के माध्यम से प्रबंधित किया जाता है। मुख्य विधियाँ: application(_:didFinishLaunchingWithOptions:) — पहले लॉन्च पर आरंभीकरण; applicationDidBecomeActive — ऐप दृश्यमान और इंटरैक्शन के लिए तैयार; applicationWillResignActive — निष्क्रिय अवस्था में संक्रमण (इनकमिंग कॉल, नोटिफिकेशन शेड बंद करना); applicationDidEnterBackground — ऐप छिपा हुआ, डेटा सहेजने के लिए ~5 सेकंड; applicationWillEnterForeground — पृष्ठभूमि से वापसी; applicationWillTerminate — समाप्ति (केवल पुराने ऐप के लिए बिना suspended के कॉल किया जाता है)।

iOS 13 से शुरू करके, Apple ने iPad और macOS Catalyst पर बहु-विंडो ऐप का समर्थन करने के लिए SceneDelegate (UISceneDelegate) पेश किया। SceneDelegate प्रत्येक व्यक्तिगत दृश्य (विंडो) के जीवनचक्र का प्रबंधन करता है: scene(_:willConnectTo:options:) — दृश्य निर्माण; sceneDidBecomeActive — दृश्य सक्रिय; sceneWillResignActive — दृश्य फ़ोकस खोता है; sceneDidEnterBackground — दृश्य छिपा हुआ। AppDelegate वैश्विक घटनाओं (डेटा लोडिंग, पुश नोटिफिकेशन) को संभालता है, जबकि SceneDelegate प्रत्येक विंडो की UI स्थिति को संभालता है। SwiftUI में, जीवनचक्र को @Environment(\.scenePhase): .active, .inactive, .background पर्यावरण मान के माध्यम से संभाला जाता है — यह SwiftUI और UIKit ऐप दोनों के लिए एक एकीकृत API प्रदान करता है।

Android जीवनचक्र: Application और ProcessLifecycleOwner

Android में, जीवनचक्र Application वर्ग से शुरू होता है — एक सिंगलटन जो किसी भी Activity से पहले बनाया जाता है। Application.onCreate() विधि पहला प्रवेश बिंदु है, जिसका उपयोग वैश्विक आरंभीकरण (Analytics, DI, Crash Reporting) के लिए किया जाता है। उसके बाद, Activity अनुक्रम के साथ लॉन्च होती है: onCreate() → onStart() → onResume()। छोटा करने पर: onPause() → onStop() → onSaveInstanceState()। नष्ट होने पर: onDestroy()। वापस आने पर: onRestart() → onStart() → onResume()।

ProcessLifecycleOwner (AndroidX Lifecycle 2.2+ से) पूरी प्रक्रिया के जीवनचक्र को ट्रैक करता है, न कि किसी व्यक्तिगत Activity का। यह दो अवस्थाएँ प्रदान करता है: ON_RESUME (ऐप अग्रभूमि में) और ON_STOP (ऐप छिपा हुआ)। ProcessLifecycleOwner प्रक्रिया स्तर पर «ऐप पृष्ठभूमि में कब गया» की समस्या को हल करता है — यह SDK, लाइब्रेरी और मॉड्यूलर ऐप के लिए महत्वपूर्ण है। Jetpack Compose में, जीवनचक्र LifecycleEventObserver और collectAsStateWithLifecycle के माध्यम से प्रबंधित किया जाता है, जो पृष्ठभूमि मोड में स्वचालित रूप से डेटा संग्रह को निलंबित करता है। Android 14 (API 34) ने Service.onTimeout के माध्यम से अग्रभूमि सेवा जीवनचक्र अधिसूचना जोड़ी — सेवा को 6 घंटे के भीतर पूरा होना चाहिए, अन्यथा सिस्टम इसे जबरन रोक देता है।

iOS और Android जीवनचक्र की तुलना

iOS Android विवरण
Not Running ऐप लॉन्च नहीं हुआ
didFinishLaunching Application.onCreate लॉन्च पर पहला आरंभीकरण
Active onResume ऐप दृश्यमान और इनपुट स्वीकार कर रहा है
Inactive onPause अस्थायी फ़ोकस हानि (कॉल, नोटिफिकेशन शेड)
Background onStop ऐप छिपा हुआ, कोड निष्पादित हो सकता है
Suspended कोड निष्पादित नहीं हो रहा, मेमोरी आरक्षित है
Will Terminate onDestroy ऐप समाप्त हो रहा है

मुख्य अंतर: iOS पृष्ठभूमि में प्रवेश करने के 5-10 सेकंड बाद ऐप को जबरन Suspended (कोड निष्पादन बंद) में स्थानांतरित करता है। Android लंबी अवधि के लिए पृष्ठभूमि कार्य (सेवाएँ, WorkManager) की अनुमति देता है, लेकिन Doze Mode (Android 6+) और पृष्ठभूमि प्रतिबंधों (Android 12+) की सीमाओं के साथ। Android में ProcessLifecycleOwner iOS में UIApplicationDidEnterBackgroundNotification के समतुल्य है, इस अंतर के साथ कि यह पृष्ठभूमि में किसी भी संक्रमण पर सक्रिय होता है, न कि केवल फ़ोकस खोने के बाद।

कोड उदाहरण

iOS: जीवनचक्र विधियों के साथ AppDelegate

सभी जीवनचक्र अवस्थाओं को संभालने वाला मूल AppDelegate कार्यान्वयन। पृष्ठभूमि में जाने पर डेटा सहेजना और वापस आने पर UI अपडेट करना।

swift
import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        Analytics.shared.initialize()
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        NotificationCenter.default.post(name: .appDidBecomeActive, object: nil)
    }

    func applicationWillResignActive(_ application: UIApplication) {
        NotificationCenter.default.post(name: .appWillResignActive, object: nil)
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        CoreDataManager.shared.saveContext()
        UserDefaults.standard.synchronize()
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        NetworkManager.shared.refreshSession()
    }
}

AppDelegate केंद्रीय जीवनचक्र बिंदु है। applicationDidEnterBackground एक महत्वपूर्ण विधि है: iOS सहेजने के लिए ~5 सेकंड देता है। applicationDidBecomeActive — UI अपडेट करें, एनिमेशन पुनः शुरू करें। SceneDelegate (iOS 13+) के लिए, जीवनचक्र तर्क दृश्यों में वितरित किया जाता है: sceneDidBecomeActive / sceneDidEnterBackground व्यक्तिगत विंडो का प्रबंधन करते हैं।

iOS: SceneDelegate (iOS 13+)

बहु-विंडो iPad ऐप के लिए SceneDelegate। प्रत्येक दृश्य का अपना जीवनचक्र होता है, जो अन्य विंडो से स्वतंत्र होता है।

swift
import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(
        _ scene: UIScene,
        willConnectTo session: UISceneSession,
        options connectionOptions: UIScene.ConnectionOptions
    ) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: windowScene)
        window?.rootViewController = ViewController()
        window?.makeKeyAndVisible()
    }

    func sceneDidBecomeActive(_ scene: UIScene) {
        PlayerManager.shared.resume()
    }

    func sceneDidEnterBackground(_ scene: UIScene) {
        PlayerManager.shared.pause()
        CoreDataManager.shared.saveContext()
    }

    func sceneDidDisconnect(_ scene: UIScene) {
        PlayerManager.shared.cleanup()
    }
}

SceneDelegate एक व्यक्तिगत दृश्य के जीवनचक्र का प्रबंधन करता है। sceneDidBecomeActive / sceneDidEnterBackground एक विशिष्ट विंडो के लिए AppDelegate विधियों के समतुल्य हैं। sceneDidDisconnect दृश्य बंद होने पर कॉल किया जाता है (उपयोगकर्ता ने iPad पर विंडो बंद कर दी)। iOS 12 और नीचे के साथ संगतता के लिए, AppDelegate को SceneDelegate तर्क को दोहराना चाहिए। iOS 17+ में, आप scenePhase के आधार पर कार्यों को स्वचालित रूप से रोकने/फिर से शुरू करने के लिए @Observable का उपयोग कर सकते हैं।

Android: ProcessLifecycleOwner के साथ Application

ProcessLifecycleOwner ट्रैक करता है कि ऐब प्रक्रिया स्तर पर अग्रभूमि/पृष्ठभूमि में कब है। यह वैश्विक जीवनचक्र प्रबंधन के लिए इष्टतम दृष्टिकोण है।

kotlin
import android.app.Application
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent

class MainApplication : Application() {

    override fun onCreate() {
        super.onCreate()

        ProcessLifecycleOwner.get().lifecycle.addObserver(AppLifecycleObserver())
    }
}

class AppLifecycleObserver : LifecycleObserver {

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onEnterForeground() {
        Analytics.shared.onForeground()
        NetworkMonitor.shared.start()
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onEnterBackground() {
        Analytics.shared.onBackground()
        NetworkMonitor.shared.stop()
    }
}

ProcessLifecycleOwner ऐप स्तर पर पृष्ठभूमि में संक्रमण को ट्रैक करने का एकमात्र सही तरीका है। ON_START तब सक्रिय होता है जब ऐप दृश्यमान हो जाता है (अग्रभूमि), ON_STOP — जब पूरी तरह से छिपा होता है (पृष्ठभूमि)। Activity जीवनचक्र के विपरीत, ProcessLifecycleOwner किसी विशिष्ट स्क्रीन से बंधा नहीं है। Jetpack Compose के लिए, मैन्युअल अवलोकन के बजाय LifecycleResumeEffect या collectAsStateWithLifecycle का उपयोग करें।

Android: ViewModel के साथ Activity जीवनचक्र

ViewModel + Lifecycle जीवनचक्र प्रबंधन के लिए सही Android आर्किटेक्चर है। ViewModel स्वचालित रूप से onDestroy पर साफ़ हो जाता है, लीक को रोकता है।

kotlin
import androidx.lifecycle.ViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData

class TimerViewModel : ViewModel() {

    private val _time = MutableLiveData<Long>()
    val time: LiveData<Long> = _time

    private var startTime = System.currentTimeMillis()

    init {
        updateTime()
    }

    private fun updateTime() {
        _time.value = System.currentTimeMillis() - startTime
    }

    override fun onCleared() {
        super.onCleared()
        Logger.d("ViewModel cleared — संसाधन मुक्त किए जा रहे हैं")
    }
}

// Activity में
class TimerActivity : AppCompatActivity() {

    private val viewModel: TimerViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Logger.d("Activity created")
    }

    override fun onResume() {
        super.onResume()
        viewModel.time.observe(this) { Logger.d("Time: $it") }
    }

    override fun onPause() {
        super.onPause()
        Logger.d("Activity paused — एनिमेशन रोके जा रहे हैं")
    }

    override fun onDestroy() {
        super.onDestroy()
        Logger.d("Activity destroyed — सफाई")
    }
}

ViewModel स्क्रीन रोटेशन से बचता है और केवल Activity के समाप्त होने पर नष्ट होता है। onCleared() संसाधनों को मुक्त करने और स्ट्रीम से सब्सक्रिप्शन हटाने का स्थान है। LiveData स्वचालित रूप से onPause पर अवलोकन रोकता है और onResume पर फिर से शुरू करता है — यह पृष्ठभूमि कार्य के दौरान लीक और क्रैश से सुरक्षा प्रदान करता है। Compose में, इसी उद्देश्य के लिए collectAsStateWithLifecycle() का उपयोग करें।

अक्सर पूछे जाने वाले प्रश्न

जब उपयोगकर्ता iOS ऐप को छोटा करता है तो क्या होता है?

छोटा करने पर, ऐप सक्रिय से निष्क्रिय (संक्षेप में), फिर पृष्ठभूमि में चला जाता है। कुछ सेकंड के बाद, सिस्टम इसे suspended में स्थानांतरित कर सकता है — कोड निष्पादित नहीं होता, मेमोरी आरक्षित होती है। जब मेमोरी कम होती है, तो सिस्टम निलंबित ऐप को समाप्त कर देता है (willTerminate कॉल नहीं किया जाता)। अपना डेटा applicationDidEnterBackground में सहेजें — सहेजने के लिए यह अंतिम गारंटीकृत बिंदु है।

क्या मुझे सभी App Lifecycle अवस्थाओं को संभालने की आवश्यकता है?

न्यूनतम अनिवार्य: applicationDidEnterBackground — उपयोगकर्ता डेटा सहेजें; applicationWillEnterForeground — UI अपडेट करें; Android में onPause — एनिमेशन/सेंसर रोकें। ProcessLifecycleOwner प्रबंधन को सरल बनाता है: onResume — onPause अग्रभूमि के लिए, onStart — onStop दृश्यता के लिए। आवश्यकतानुसार अन्य अवस्थाओं को संभालें — सभी अवस्थाएँ हर ऐप के लिए महत्वपूर्ण नहीं हैं।

SceneDelegate AppDelegate से कैसे अलग है?

AppDelegate पूरे ऐप का वैश्विक प्रतिनिधि है (लॉन्च, पृष्ठभूमि संक्रमण)। SceneDelegate (iOS 13+) एक व्यक्तिगत विंडो (दृश्य) के जीवनचक्र का प्रबंधन करता है — बहु-विंडो iPad ऐप में, प्रत्येक दृश्य का अपना जीवनचक्र होता है। iOS 12 और नीचे के लिए, सभी जीवनचक्र AppDelegate के माध्यम से संभाला जाता है। iPadOS 16+ के साथ, Stage Manager के लिए SceneDelegate अनिवार्य है।

Android में ProcessLifecycleOwner क्या है?

ProcessLifecycleOwner AndroidX Lifecycle का एक घटक है जो पूरे ऐप (प्रक्रिया) के जीवनचक्र को ट्रैक करता है, न कि किसी व्यक्तिगत Activity का। यह दो मुख्य घटनाएँ प्रदान करता है: ON_RESUME (ऐप अग्रभूमि में) और ON_STOP (ऐप पृष्ठभूमि में)। इसका उपयोग SDK, एनालिटिक्स, नेटवर्क मॉनिटर के आरंभीकरण/सफाई के लिए किया जाता है — वह सब जो वर्तमान स्क्रीन की परवाह किए बिना, ऐप के पृष्ठभूमि में जाने पर प्रतिक्रिया करना चाहिए।

Jetpack Compose में जीवनचक्र कैसे संभालें?

Jetpack Compose में, LocalLifecycleOwner.current.lifecycle के माध्यम से LifecycleEventObserver या collectAsStateWithLifecycle() फ़ंक्शन का उपयोग करें। Compose स्क्रीन के लिए, LifecycleResumeEffect का उपयोग करें — DisposableEffect के समान, जो onResume पर चलता है और onPause पर साफ़ होता है। lifecycleScope.launchWhenResumed — एक कोरूटीन जो पृष्ठभूमि में स्वचालित रूप से निलंबित हो जाता है।

सारांश

  • App Lifecycle ऐप अवस्थाओं की एक सीमित अवस्था मशीन है जो संसाधन प्रबंधन, डेटा संरक्षण और स्थिरता निर्धारित करती है।
  • iOS AppDelegate (applicationDidEnterBackground) 5 सेकंड के भीतर पृष्ठभूमि में जाने पर डेटा सहेजने के लिए महत्वपूर्ण विधि है।
  • iOS SceneDelegate (iOS 13+) प्रत्येक दृश्य के जीवनचक्र को अलग से प्रबंधित करता है — बहु-विंडो iPad ऐप के लिए अनिवार्य।
  • Android ProcessLifecycleOwner SDK आरंभीकरण/सफाई के लिए एक वैश्विक प्रक्रिया जीवनचक्र पर्यवेक्षक है।
  • Android में ViewModel स्क्रीन रोटेशन से बचता है और Activity समाप्त होने पर साफ़ होता है — मेमोरी लीक को रोकता है।
  • SwiftUI @Environment(\.scenePhase) SwiftUI में जीवनचक्र के लिए एक एकीकृत API प्रदान करता है (active, inactive, background)।
  • उचित जीवनचक्र प्रबंधन मेमोरी खपत को 30-40% कम करता है और पृष्ठभूमि कार्य के दौरान 40% क्रैश को रोकता है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें